All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Williams, Dan J" <dan.j.williams@intel.com>
To: "toshi.kani@hp.com" <toshi.kani@hp.com>
Cc: "mingo@kernel.org" <mingo@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>,
	"hch@lst.de" <hch@lst.de>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"axboe@kernel.dk" <axboe@kernel.dk>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH v2 15/17] libnvdimm: Set numa_node to NVDIMM devices
Date: Thu, 25 Jun 2015 23:42:33 +0000	[thread overview]
Message-ID: <1435275750.18090.5.camel@intel.com> (raw)
In-Reply-To: <1435272910.11808.356.camel@misato.fc.hp.com>

On Thu, 2015-06-25 at 16:55 -0600, Toshi Kani wrote:
> On Thu, 2015-06-25 at 15:34 -0700, Dan Williams wrote:
> > On Thu, Jun 25, 2015 at 3:11 PM, Toshi Kani <toshi.kani@hp.com> wrote:
> > > On Thu, 2015-06-25 at 15:00 -0700, Dan Williams wrote:
> > > Yes, I see no problem with bound BTTs and their device files.  So, how
> > > do we bind BTT with this new version?
> > >
> > 
> > # cd /sys/bus/nd/devices
> > # uuidgen > btt6/uuid
> > # echo 4096 > btt6/sector_size
> > # echo namespace6.0 > btt6/namespace
> > # echo namespace6.0 > ../drivers/nd_pmem/unbind
> > # echo btt6 > ../drivers/nd_pmem/bind
> > 
> > After reboot, when the system sees namespace6.0 again it will notice
> > the btt instance and attach bttX instead.  The net effect is that now
> > you'll only ever have /dev/pmem6 or /dev/pmem6s, never both at the
> > same time that was a side effect of the stacking approach.
> > 
> > I'll post the patch that updates libndctl and the unit tests shortly
> 
> Maybe I am missing something, but I am getting errors on my system.  (I
> used btt0 since there is no btt6.)
> 
> # cat bind.sh
> set -x
> cd /sys/bus/nd/devices
> uuidgen > btt0/uuid
> echo 4096 > btt0/sector_size
> echo namespace0.0 > btt0/namespace
> echo namespace0.0 > ../drivers/nd_pmem/unbind
> echo btt0 > ../drivers/nd_pmem/bind
> 
> # sh bind.sh
> + cd /sys/bus/nd/devices
> + uuidgen
> + echo 4096
> + echo namespace0.0
> bind.sh: line 6: echo: write error: Device or resource busy
> + echo namespace0.0
> bind.sh: line 7: echo: write error: No such device
> + echo btt0
> bind.sh: line 8: echo: write error: No such device
> 
> # dmesg
>  :
> [12513.839162] nd btt0: uuid_store: result: 0 wrote:
> b32cd195-9aae-4c54-a5ac-49adb50a8a98
> [12513.880286] nd btt0: sector_size_store: result: 0 wrote: 4096
> [12513.909494] nd btt0: namespace0.0 already claimed
> [12513.933364] nd btt0: namespace_store: result: -16 wrote: namespace0.0
> [12513.966808]  ndbus0: nd_pmem.probe(btt0) = -19
> 

So this turned out to be a perfect example of why we might want to have
the region-id in the btt device name just like namespaces, because btt0
was actually bound to namespace4.0 on Toshi's system.  The following
update, that I will fold in to the series, fixes this.  Note that the
association of btt id to to namespace is still non-deterministic.  I.e.
btt0.1 could be assigned as the btt for namespace0.0, but at least when
looking at /sys/bus/nd/devices it will be clear which btts belong to
which regions.

# ls /sys/bus/nd/devices
btt0.0  btt3.0  btt6.0        namespace2.0  namespace5.0  nmem1  nmem4    region2  region5
btt1.0  btt4.0  namespace0.0  namespace3.0  namespace6.0  nmem2  region0  region3  region6
btt2.0  btt5.0  namespace1.0  namespace4.0  nmem0         nmem3  region1  region4


8<------------
diff --git a/drivers/nvdimm/btt_devs.c b/drivers/nvdimm/btt_devs.c
index 2dfb529f4d35..6ac8c0fea3ec 100644
--- a/drivers/nvdimm/btt_devs.c
+++ b/drivers/nvdimm/btt_devs.c
@@ -21,8 +21,6 @@
 #include "btt.h"
 #include "nd.h"
 
-static DEFINE_IDA(btt_ida);
-
 static void __nd_btt_detach_ndns(struct nd_btt *nd_btt)
 {
 	struct nd_namespace_common *ndns = nd_btt->ndns;
@@ -75,11 +73,12 @@ static bool nd_btt_attach_ndns(struct nd_btt *nd_btt,
 
 static void nd_btt_release(struct device *dev)
 {
+	struct nd_region *nd_region = to_nd_region(dev->parent);
 	struct nd_btt *nd_btt = to_nd_btt(dev);
 
 	dev_dbg(dev, "%s\n", __func__);
 	nd_btt_detach_ndns(nd_btt);
-	ida_simple_remove(&btt_ida, nd_btt->id);
+	ida_simple_remove(&nd_region->btt_ida, nd_btt->id);
 	kfree(nd_btt->uuid);
 	kfree(nd_btt);
 }
@@ -309,7 +308,7 @@ static struct device *__nd_btt_create(struct nd_region *nd_region,
 	if (!nd_btt)
 		return NULL;
 
-	nd_btt->id = ida_simple_get(&btt_ida, 0, 0, GFP_KERNEL);
+	nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL);
 	if (nd_btt->id < 0) {
 		kfree(nd_btt);
 		return NULL;
@@ -320,7 +319,7 @@ static struct device *__nd_btt_create(struct nd_region *nd_region,
 		uuid = kmemdup(uuid, 16, GFP_KERNEL);
 	nd_btt->uuid = uuid;
 	dev = &nd_btt->dev;
-	dev_set_name(dev, "btt%d", nd_btt->id);
+	dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id);
 	dev->parent = &nd_region->dev;
 	dev->type = &nd_btt_device_type;
 	dev->groups = nd_btt_attribute_groups;
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index 72c26461835d..c41f53e74277 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -91,6 +91,7 @@ struct nd_percpu_lane {
 struct nd_region {
 	struct device dev;
 	struct ida ns_ida;
+	struct ida btt_ida;
 	struct device *ns_seed;
 	struct device *btt_seed;
 	u16 ndr_mappings;
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index 55b424f6ba0d..a5233422f9dc 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -738,6 +738,7 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
 	nd_region->ro = ro;
 	nd_region->numa_node = ndr_desc->numa_node;
 	ida_init(&nd_region->ns_ida);
+	ida_init(&nd_region->btt_ida);
 	dev = &nd_region->dev;
 	dev_set_name(dev, "region%d", nd_region->id);
 	dev->parent = &nvdimm_bus->dev;


WARNING: multiple messages have this Message-ID (diff)
From: "Williams, Dan J" <dan.j.williams@intel.com>
To: "toshi.kani@hp.com" <toshi.kani@hp.com>
Cc: "mingo@kernel.org" <mingo@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@ml01.01.org>,
	"hch@lst.de" <hch@lst.de>,
	"linux-acpi@vger.kernel.org" <linux-acpi@vger.kernel.org>,
	"axboe@kernel.dk" <axboe@kernel.dk>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [PATCH v2 15/17] libnvdimm: Set numa_node to NVDIMM devices
Date: Thu, 25 Jun 2015 23:42:33 +0000	[thread overview]
Message-ID: <1435275750.18090.5.camel@intel.com> (raw)
In-Reply-To: <1435272910.11808.356.camel@misato.fc.hp.com>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 5306 bytes --]

On Thu, 2015-06-25 at 16:55 -0600, Toshi Kani wrote:
> On Thu, 2015-06-25 at 15:34 -0700, Dan Williams wrote:
> > On Thu, Jun 25, 2015 at 3:11 PM, Toshi Kani <toshi.kani@hp.com> wrote:
> > > On Thu, 2015-06-25 at 15:00 -0700, Dan Williams wrote:
> > > Yes, I see no problem with bound BTTs and their device files.  So, how
> > > do we bind BTT with this new version?
> > >
> > 
> > # cd /sys/bus/nd/devices
> > # uuidgen > btt6/uuid
> > # echo 4096 > btt6/sector_size
> > # echo namespace6.0 > btt6/namespace
> > # echo namespace6.0 > ../drivers/nd_pmem/unbind
> > # echo btt6 > ../drivers/nd_pmem/bind
> > 
> > After reboot, when the system sees namespace6.0 again it will notice
> > the btt instance and attach bttX instead.  The net effect is that now
> > you'll only ever have /dev/pmem6 or /dev/pmem6s, never both at the
> > same time that was a side effect of the stacking approach.
> > 
> > I'll post the patch that updates libndctl and the unit tests shortly
> 
> Maybe I am missing something, but I am getting errors on my system.  (I
> used btt0 since there is no btt6.)
> 
> # cat bind.sh
> set -x
> cd /sys/bus/nd/devices
> uuidgen > btt0/uuid
> echo 4096 > btt0/sector_size
> echo namespace0.0 > btt0/namespace
> echo namespace0.0 > ../drivers/nd_pmem/unbind
> echo btt0 > ../drivers/nd_pmem/bind
> 
> # sh bind.sh
> + cd /sys/bus/nd/devices
> + uuidgen
> + echo 4096
> + echo namespace0.0
> bind.sh: line 6: echo: write error: Device or resource busy
> + echo namespace0.0
> bind.sh: line 7: echo: write error: No such device
> + echo btt0
> bind.sh: line 8: echo: write error: No such device
> 
> # dmesg
>  :
> [12513.839162] nd btt0: uuid_store: result: 0 wrote:
> b32cd195-9aae-4c54-a5ac-49adb50a8a98
> [12513.880286] nd btt0: sector_size_store: result: 0 wrote: 4096
> [12513.909494] nd btt0: namespace0.0 already claimed
> [12513.933364] nd btt0: namespace_store: result: -16 wrote: namespace0.0
> [12513.966808]  ndbus0: nd_pmem.probe(btt0) = -19
> 

So this turned out to be a perfect example of why we might want to have
the region-id in the btt device name just like namespaces, because btt0
was actually bound to namespace4.0 on Toshi's system.  The following
update, that I will fold in to the series, fixes this.  Note that the
association of btt id to to namespace is still non-deterministic.  I.e.
btt0.1 could be assigned as the btt for namespace0.0, but at least when
looking at /sys/bus/nd/devices it will be clear which btts belong to
which regions.

# ls /sys/bus/nd/devices
btt0.0  btt3.0  btt6.0        namespace2.0  namespace5.0  nmem1  nmem4    region2  region5
btt1.0  btt4.0  namespace0.0  namespace3.0  namespace6.0  nmem2  region0  region3  region6
btt2.0  btt5.0  namespace1.0  namespace4.0  nmem0         nmem3  region1  region4


8<------------
diff --git a/drivers/nvdimm/btt_devs.c b/drivers/nvdimm/btt_devs.c
index 2dfb529f4d35..6ac8c0fea3ec 100644
--- a/drivers/nvdimm/btt_devs.c
+++ b/drivers/nvdimm/btt_devs.c
@@ -21,8 +21,6 @@
 #include "btt.h"
 #include "nd.h"
 
-static DEFINE_IDA(btt_ida);
-
 static void __nd_btt_detach_ndns(struct nd_btt *nd_btt)
 {
 	struct nd_namespace_common *ndns = nd_btt->ndns;
@@ -75,11 +73,12 @@ static bool nd_btt_attach_ndns(struct nd_btt *nd_btt,
 
 static void nd_btt_release(struct device *dev)
 {
+	struct nd_region *nd_region = to_nd_region(dev->parent);
 	struct nd_btt *nd_btt = to_nd_btt(dev);
 
 	dev_dbg(dev, "%s\n", __func__);
 	nd_btt_detach_ndns(nd_btt);
-	ida_simple_remove(&btt_ida, nd_btt->id);
+	ida_simple_remove(&nd_region->btt_ida, nd_btt->id);
 	kfree(nd_btt->uuid);
 	kfree(nd_btt);
 }
@@ -309,7 +308,7 @@ static struct device *__nd_btt_create(struct nd_region *nd_region,
 	if (!nd_btt)
 		return NULL;
 
-	nd_btt->id = ida_simple_get(&btt_ida, 0, 0, GFP_KERNEL);
+	nd_btt->id = ida_simple_get(&nd_region->btt_ida, 0, 0, GFP_KERNEL);
 	if (nd_btt->id < 0) {
 		kfree(nd_btt);
 		return NULL;
@@ -320,7 +319,7 @@ static struct device *__nd_btt_create(struct nd_region *nd_region,
 		uuid = kmemdup(uuid, 16, GFP_KERNEL);
 	nd_btt->uuid = uuid;
 	dev = &nd_btt->dev;
-	dev_set_name(dev, "btt%d", nd_btt->id);
+	dev_set_name(dev, "btt%d.%d", nd_region->id, nd_btt->id);
 	dev->parent = &nd_region->dev;
 	dev->type = &nd_btt_device_type;
 	dev->groups = nd_btt_attribute_groups;
diff --git a/drivers/nvdimm/nd.h b/drivers/nvdimm/nd.h
index 72c26461835d..c41f53e74277 100644
--- a/drivers/nvdimm/nd.h
+++ b/drivers/nvdimm/nd.h
@@ -91,6 +91,7 @@ struct nd_percpu_lane {
 struct nd_region {
 	struct device dev;
 	struct ida ns_ida;
+	struct ida btt_ida;
 	struct device *ns_seed;
 	struct device *btt_seed;
 	u16 ndr_mappings;
diff --git a/drivers/nvdimm/region_devs.c b/drivers/nvdimm/region_devs.c
index 55b424f6ba0d..a5233422f9dc 100644
--- a/drivers/nvdimm/region_devs.c
+++ b/drivers/nvdimm/region_devs.c
@@ -738,6 +738,7 @@ static struct nd_region *nd_region_create(struct nvdimm_bus *nvdimm_bus,
 	nd_region->ro = ro;
 	nd_region->numa_node = ndr_desc->numa_node;
 	ida_init(&nd_region->ns_ida);
+	ida_init(&nd_region->btt_ida);
 	dev = &nd_region->dev;
 	dev_set_name(dev, "region%d", nd_region->id);
 	dev->parent = &nvdimm_bus->dev;

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

  reply	other threads:[~2015-06-25 23:42 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-25  9:36 [PATCH v2 00/17] libnvdimm: ->rw_bytes(), BLK, BTT, PMEM api, and unit tests Dan Williams
2015-06-25  9:36 ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 01/17] libnvdimm: infrastructure for btt devices Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 02/17] nd_btt: atomic sector updates Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 03/17] libnvdimm, nfit, nd_blk: driver for BLK-mode access persistent memory Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 04/17] tools/testing/nvdimm: libnvdimm unit test infrastructure Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 05/17] libnvdimm: Non-Volatile Devices Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 06/17] fs/block_dev.c: skip rw_page if bdev has integrity Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:36 ` [PATCH v2 07/17] libnvdimm, btt: add support for blk integrity Dan Williams
2015-06-25  9:36   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 08/17] libnvdimm, blk: " Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 09/17] libnvdimm, pmem: fix up max_hw_sectors Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 10/17] pmem: make_request cleanups Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 11/17] libnvdimm: enable iostat Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 12/17] pmem: flag pmem block devices as non-rotational Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 13/17] libnvdimm, nfit: handle unarmed dimms, mark namespaces read-only Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 14/17] acpi: Add acpi_map_pxm_to_online_node() Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 15/17] libnvdimm: Set numa_node to NVDIMM devices Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-25 17:45   ` Toshi Kani
2015-06-25 17:45     ` Toshi Kani
2015-06-25 17:47     ` Dan Williams
2015-06-25 17:47       ` Dan Williams
2015-06-25 18:34     ` Williams, Dan J
2015-06-25 18:34       ` Williams, Dan J
2015-06-25 21:31       ` Dan Williams
2015-06-25 21:31         ` Dan Williams
2015-06-25 21:51         ` Toshi Kani
2015-06-25 21:51           ` Toshi Kani
2015-06-25 22:00           ` Dan Williams
2015-06-25 22:00             ` Dan Williams
2015-06-25 22:11             ` Toshi Kani
2015-06-25 22:11               ` Toshi Kani
2015-06-25 22:34               ` Dan Williams
2015-06-25 22:34                 ` Dan Williams
2015-06-25 22:55                 ` Toshi Kani
2015-06-25 22:55                   ` Toshi Kani
2015-06-25 23:42                   ` Williams, Dan J [this message]
2015-06-25 23:42                     ` Williams, Dan J
2015-06-26  0:55                     ` Toshi Kani
2015-06-26  0:55                       ` Toshi Kani
2015-06-26  1:08                       ` Dan Williams
2015-06-26  1:08                         ` Dan Williams
2015-06-26  1:21                         ` Toshi Kani
2015-06-26  1:21                           ` Toshi Kani
2015-06-25  9:37 ` [PATCH v2 16/17] libnvdimm: Add sysfs " Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-26  2:21   ` Toshi Kani
2015-06-26  2:21     ` Toshi Kani
2015-06-26 15:26     ` Dan Williams
2015-06-26 15:26       ` Dan Williams
2015-06-25  9:37 ` [PATCH v2 17/17] arch, x86: pmem api for ensuring durability of persistent memory updates Dan Williams
2015-06-25  9:37   ` Dan Williams
2015-06-30 10:21   ` Dan Carpenter
2015-06-30 16:23     ` Williams, Dan J
2015-06-30 16:23       ` Williams, Dan J

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=1435275750.18090.5.camel@intel.com \
    --to=dan.j.williams@intel.com \
    --cc=axboe@kernel.dk \
    --cc=hch@lst.de \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mingo@kernel.org \
    --cc=toshi.kani@hp.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.