linux-nvdimm.lists.01.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Moyer <jmoyer@redhat.com>
To: dan.j.williams@intel.com
Cc: Yi Zhang <yi.zhang@redhat.com>, linux-nvdimm@lists.01.org
Subject: Re: create devdax with "-a 1g" failed from 5.3.0-rc1
Date: Mon, 26 Aug 2019 11:58:28 -0400	[thread overview]
Message-ID: <x49y2zfudej.fsf@segfault.boston.devel.redhat.com> (raw)
In-Reply-To: <x498srsdhrs.fsf@segfault.boston.devel.redhat.com> (Jeff Moyer's message of "Fri, 16 Aug 2019 15:36:39 -0400")

Dan, we should probably fix this before 5.3 ships.  Do you have any
concerns with the patch I attached?  If not, I'll submit a proper one.

-Jeff

Jeff Moyer <jmoyer@redhat.com> writes:

> Hi, Yi,
>
> Yi Zhang <yi.zhang@redhat.com> writes:
>
>> Hi Dan
>>
>> As subject, I found it failed from bellow commit[1], steps list here
>> [2] and I've attached the full dmesg, let me know if you need more
>> info, thanks.
>>
>> [1]
>> commit a3619190d62ed9d66416891be2416f6bea2b3ca4 (refs/bisect/bad)
>> Author: Dan Williams <dan.j.williams@intel.com>
>> Date:   Thu Jul 18 15:58:40 2019 -0700
>>
>>     libnvdimm/pfn: stop padding pmem namespaces to section alignment
>>
>> [2]
>> # ./ndctl destroy-namespace all -r all -f
>> destroyed 5 namespaces
>> # ./ndctl create-namespace -r region1 -m devdax -a 1g -s 12G -vv
>> libndctl: ndctl_dax_enable: dax1.0: failed to enable
>>   Error: namespace1.0: failed to enable
>>
>> failed to create namespace: No such device or address
>> # ./ndctl -v
>> 65
>
> Thanks for bisecting.  The problem is that your pmem region is not
> aligned to 1GB.  The current code handles the start offset just fine,
> but does not even consider that the end address might be misaligned.  We
> could bring back end_trunc, and that solves the problem.  Unfortunately,
> it means that if you request a 12GB namespace, for example, you'll only
> get 11GB of usable space.  Note that the old code functioned in this
> manner, too.  A better solution would be to bump the allocation so that
> you get 12GB of usable memory.  I'm not quite sure how to go about that,
> though.  Dan?
>
> Below is a patch that fixes the regression on my end.  Feel free to give
> it a try.
>
> -Jeff
>
> diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
> index 3e7b11c..cb98b8f 100644
> --- a/drivers/nvdimm/pfn_devs.c
> +++ b/drivers/nvdimm/pfn_devs.c
> @@ -655,6 +655,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
>  	resource_size_t start, size;
>  	struct nd_region *nd_region;
>  	unsigned long npfns, align;
> +	u32 end_trunc;
>  	struct nd_pfn_sb *pfn_sb;
>  	phys_addr_t offset;
>  	const char *sig;
> @@ -696,6 +697,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
>  	size = resource_size(&nsio->res);
>  	npfns = PHYS_PFN(size - SZ_8K);
>  	align = max(nd_pfn->align, (1UL << SUBSECTION_SHIFT));
> +	end_trunc = start + size - ALIGN_DOWN(start + size, align);
>  	if (nd_pfn->mode == PFN_MODE_PMEM) {
>  		/*
>  		 * The altmap should be padded out to the block size used
> @@ -714,7 +716,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
>  		return -ENXIO;
>  	}
>  
> -	npfns = PHYS_PFN(size - offset);
> +	npfns = PHYS_PFN(size - offset - end_trunc);
>  	pfn_sb->mode = cpu_to_le32(nd_pfn->mode);
>  	pfn_sb->dataoff = cpu_to_le64(offset);
>  	pfn_sb->npfns = cpu_to_le64(npfns);
> @@ -723,6 +725,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
>  	memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16);
>  	pfn_sb->version_major = cpu_to_le16(1);
>  	pfn_sb->version_minor = cpu_to_le16(3);
> +	pfn_sb->end_trunc = cpu_to_le32(end_trunc);
>  	pfn_sb->align = cpu_to_le32(nd_pfn->align);
>  	checksum = nd_sb_checksum((struct nd_gen_sb *) pfn_sb);
>  	pfn_sb->checksum = cpu_to_le64(checksum);
> _______________________________________________
> Linux-nvdimm mailing list
> Linux-nvdimm@lists.01.org
> https://lists.01.org/mailman/listinfo/linux-nvdimm
_______________________________________________
Linux-nvdimm mailing list
Linux-nvdimm@lists.01.org
https://lists.01.org/mailman/listinfo/linux-nvdimm

  parent reply	other threads:[~2019-08-26 16:00 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1529583867.3735830.1564533094419.JavaMail.zimbra@redhat.com>
2019-07-31  0:41 ` create devdax with "-a 1g" failed from 5.3.0-rc1 Yi Zhang
2019-07-31  5:46   ` Yi Zhang
2019-08-16 19:36   ` Jeff Moyer
2019-08-19  6:26     ` Yi Zhang
2019-08-26 15:58     ` Jeff Moyer [this message]
2019-08-27  1:22       ` Dan Williams

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=x49y2zfudej.fsf@segfault.boston.devel.redhat.com \
    --to=jmoyer@redhat.com \
    --cc=dan.j.williams@intel.com \
    --cc=linux-nvdimm@lists.01.org \
    --cc=yi.zhang@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).