On Sun, Jun 24, 2018 at 11:43 PM, Yasunori Goto <[email protected]> wrote:
>> >
>> > This warning seems to be the following line.
>> > ---
>> > static int grow_dpa_allocation(struct nd_region *nd_region,
>> >                 struct nd_label_id *label_id, resource_size_t n)
>> > {
>> >         struct nvdimm_bus *nvdimm_bus = 
>> > walk_to_nvdimm_bus(&nd_region->dev);
>> >         bool is_pmem = strncmp(label_id->id, "pmem", 4) == 0;
>> >         int i;
>> >   :
>> >   :
>> >                 }
>> >
>> >                 dev_WARN_ONCE(&nd_region->dev, rem,                        
>> >         <----!!!
>> >                                 "allocation underrun: %#llx of %#llx 
>> > bytes\n",     <----!!!
>> >                                 (unsigned long long) n - rem,              
>> >         <----!!!
>> >                                 (unsigned long long) n);                   
>> >         <----!!!
>> >
>>
>> Yes, this appears to be a kernel bug from when
>> multiple-namespaces-per-region support was added. The accounting of
>> free space that ndctl relies on assumes that all free space is
>> contiguous. This assumption was correct in the original
>> implementation, but not since commit:
>>
>>     a1f3e4d6a0c3 libnvdimm, region: update nd_region_available_dpa()
>> for multi-pmem support
>>
>> The fix has 3 parts:
>>
>> 1/ The kernel needs to fail attempts to allocate discontiguous free space
>>
>> 2/ The kernel needs a new sysfs attribute to export the maximum
>> contiguous free space range
>>
>> 3/ ndctl needs to be updated to pick the max contiguous size rather
>> than the max free space
>
>
> Agree.
>
> Unfortunately, I cound not use the real NVDIMM box which I found this bug now,
> because the box is very busy, and the environment will be available
> a few months later.
>
> If other person can make the above fixes, it will be faster than me.
>
> Anyone?

Yes, we're working on this.

>> Alternatively we could teach the kernel to support discontiguous pmem
>> namespaces, but we would need to check if the EFI namespace
>> specification allows for such a configuration.
>>
>
> I suppose this way is not good way probably.
>
>
> Though I searched EFI specification 2.7a,
> it says just the followings about contiguous namespace,
> and I couldn't find any other description.
>
>  ---
>  6.1 Block Translation Table (BTT) Background
>  A namespace defines a contiguously-addressed range of Non-Volatile Memory
>  conceptually similar to a SCSI Logical Unit (LUN) or a NVM Express
>  namespace.
>  ---
>
> I also searched "NVDIMM Namespace Specification"
> https://pmem.io/documents/NVDIMM_Namespace_Spec.pdf
>
> It say the followings
>  ---
>  2.6 I/O on Namespaces
>  A Persistent Memory namespace, by definition, is a contiguous range
>  of System Physical Address space."
>  ---
>
> So, I could not think that speficications allows discontigous
> pmem namespace.

Yes, that matches my interpretation as well.
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to