Message ID | 1536058062-18894-1-git-send-email-oceanhehy@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] libnvdimm, region_devs: stop NDD_ALIASING bit test if one test pass | expand |
On Tue, Sep 4, 2018 at 3:47 AM, Ocean He <oceanhehy@gmail.com> wrote: > From: Ocean He <hehy1@lenovo.com> > > There is no need to finish entire loop to execute NDD_ALIASING bit test > against every nvdimm->flags. Of course there is. I see nothing stopping someone mixing an NVDIMM that supports labels with one that doesn't. If anything I think we need fixes to make sure this operates correctly to force disable BLK-mode capactiy when the PMEM capacity is interleaved with a label-less NVDIMM.
> -----Original Message----- > From: Dan Williams <dan.j.williams@intel.com> > Sent: Tuesday, September 04, 2018 11:58 PM > To: Ocean He <oceanhehy@gmail.com> > Cc: Ross Zwisler <ross.zwisler@linux.intel.com>; Vishal L Verma > <vishal.l.verma@intel.com>; Dave Jiang <dave.jiang@intel.com>; linux- > nvdimm <linux-nvdimm@lists.01.org>; Linux Kernel Mailing List <linux- > kernel@vger.kernel.org>; Ocean HY1 He <hehy1@lenovo.com> > Subject: [External] Re: [PATCH v2] libnvdimm, region_devs: stop > NDD_ALIASING bit test if one test pass > > On Tue, Sep 4, 2018 at 3:47 AM, Ocean He <oceanhehy@gmail.com> wrote: > > From: Ocean He <hehy1@lenovo.com> > > > > There is no need to finish entire loop to execute NDD_ALIASING bit test > > against every nvdimm->flags. > > Of course there is. I see nothing stopping someone mixing an NVDIMM > that supports labels with one that doesn't. Hi Dan, Thanks for your comments. I only have NVDIMM which supports label, so I could not do this type test yet. As I understand your words, in mixing status, the nstype would be ND_DEVICE_NAMESPACE_PMEM if one NVDIMM supports labels. Am I right? By the way, do you think my patch is valuable to save a few cpu cycles here? Ocean. > If anything I think we > need fixes to make sure this operates correctly to force disable > BLK-mode capactiy when the PMEM capacity is interleaved with a > label-less NVDIMM. I am trying to translate your words to test steps, please correct me for misunderstanding. #1. Prepare 2 NVDIMMs which has no label capacity. #2. Create a region which has PMEM capacity and interleaved. ipmctl create -f -goal -socket 0x1 PersistentMemoryType=AppDirect #3. Create a BLK-mode capacity namespace, then this namespace should be "force disable" ? ndctl create-namespace -r region1 -s 1g -t pmem -m sector Ocean.
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c index fa37afc..16ee153 100644 --- a/drivers/nvdimm/region_devs.c +++ b/drivers/nvdimm/region_devs.c @@ -228,19 +228,18 @@ void nd_blk_region_set_provider_data(struct nd_blk_region *ndbr, void *data) int nd_region_to_nstype(struct nd_region *nd_region) { if (is_memory(&nd_region->dev)) { - u16 i, alias; + u16 i; - for (i = 0, alias = 0; i < nd_region->ndr_mappings; i++) { + for (i = 0; i < nd_region->ndr_mappings; i++) { struct nd_mapping *nd_mapping = &nd_region->mapping[i]; struct nvdimm *nvdimm = nd_mapping->nvdimm; if (test_bit(NDD_ALIASING, &nvdimm->flags)) - alias++; + return ND_DEVICE_NAMESPACE_PMEM; } - if (alias) - return ND_DEVICE_NAMESPACE_PMEM; - else - return ND_DEVICE_NAMESPACE_IO; + + return ND_DEVICE_NAMESPACE_IO; + } else if (is_nd_blk(&nd_region->dev)) { return ND_DEVICE_NAMESPACE_BLK; }