diff mbox

[2/2] nvme: use device_add_disk_with_groups()

Message ID 20170928193637.24707-2-mwilck@suse.com (mailing list archive)
State New, archived
Headers show

Commit Message

Martin Wilck Sept. 28, 2017, 7:36 p.m. UTC
By using device_add_disk_with_groups(), we can avoid the race
condition with udev rule processing, because no udev event will
be triggered before all attributes are available.

Signed-off-by: Martin Wilck <mwilck@suse.com>
---
 drivers/nvme/host/core.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

Comments

Schremmer, Steven Sept. 29, 2017, 7:27 p.m. UTC | #1
> From: Linux-nvme [mailto:linux-nvme-bounces@lists.infradead.org] On Behalf Of Martin Wilck
> Sent: Thursday, September 28, 2017 2:37 PM
> To: Jens Axboe <axboe@kernel.dk>; Christoph Hellwig <hch@lst.de>; Johannes Thumshirn <jthumshirn@suse.de>
> Cc: linux-block@vger.kernel.org; Martin Wilck <mwilck@suse.de>; linux-kernel@vger.kernel.org; linux-nvme@lists.infradead.org;
> Hannes Reinecke <hare@suse.de>
> Subject: [PATCH 2/2] nvme: use device_add_disk_with_groups()
> 

Tested-by: Steve Schremmer <steve.schremmer@netapp.com>
Keith Busch Sept. 29, 2017, 11 p.m. UTC | #2
On Thu, Sep 28, 2017 at 09:36:37PM +0200, Martin Wilck wrote:
> By using device_add_disk_with_groups(), we can avoid the race
> condition with udev rule processing, because no udev event will
> be triggered before all attributes are available.
> 
> Signed-off-by: Martin Wilck <mwilck@suse.com>

Looks good.

Reviewed-by: Keith Busch <keith.busch@intel.com>
diff mbox

Patch

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 5a14cc7f28ee..e7289a727715 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -2156,6 +2156,11 @@  static const struct attribute_group nvme_ns_attr_group = {
 	.is_visible	= nvme_ns_attrs_are_visible,
 };
 
+static const struct attribute_group *nvme_ns_attr_groups[] = {
+	&nvme_ns_attr_group,
+	NULL,
+};
+
 #define nvme_show_str_function(field)						\
 static ssize_t  field##_show(struct device *dev,				\
 			    struct device_attribute *attr, char *buf)		\
@@ -2405,11 +2410,8 @@  static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
 
 	kfree(id);
 
-	device_add_disk(ctrl->device, ns->disk);
-	if (sysfs_create_group(&disk_to_dev(ns->disk)->kobj,
-					&nvme_ns_attr_group))
-		pr_warn("%s: failed to create sysfs group for identification\n",
-			ns->disk->disk_name);
+	device_add_disk_with_groups(ctrl->device, ns->disk,
+				    nvme_ns_attr_groups);
 	if (ns->ndev && nvme_nvm_register_sysfs(ns))
 		pr_warn("%s: failed to register lightnvm sysfs group for identification\n",
 			ns->disk->disk_name);