aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/nvme/host/multipath.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/nvme/host/multipath.c')
-rw-r--r--drivers/nvme/host/multipath.c43
1 files changed, 9 insertions, 34 deletions
diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c
index 3b211d9e58b8..060f69e03427 100644
--- a/drivers/nvme/host/multipath.c
+++ b/drivers/nvme/host/multipath.c
@@ -198,30 +198,16 @@ void nvme_mpath_add_disk(struct nvme_ns_head *head)
198{ 198{
199 if (!head->disk) 199 if (!head->disk)
200 return; 200 return;
201 device_add_disk(&head->subsys->dev, head->disk);
202 if (sysfs_create_group(&disk_to_dev(head->disk)->kobj,
203 &nvme_ns_id_attr_group))
204 pr_warn("%s: failed to create sysfs group for identification\n",
205 head->disk->disk_name);
206}
207
208void nvme_mpath_add_disk_links(struct nvme_ns *ns)
209{
210 struct kobject *slave_disk_kobj, *holder_disk_kobj;
211
212 if (!ns->head->disk)
213 return;
214
215 slave_disk_kobj = &disk_to_dev(ns->disk)->kobj;
216 if (sysfs_create_link(ns->head->disk->slave_dir, slave_disk_kobj,
217 kobject_name(slave_disk_kobj)))
218 return;
219 201
220 holder_disk_kobj = &disk_to_dev(ns->head->disk)->kobj; 202 mutex_lock(&head->subsys->lock);
221 if (sysfs_create_link(ns->disk->part0.holder_dir, holder_disk_kobj, 203 if (!(head->disk->flags & GENHD_FL_UP)) {
222 kobject_name(holder_disk_kobj))) 204 device_add_disk(&head->subsys->dev, head->disk);
223 sysfs_remove_link(ns->head->disk->slave_dir, 205 if (sysfs_create_group(&disk_to_dev(head->disk)->kobj,
224 kobject_name(slave_disk_kobj)); 206 &nvme_ns_id_attr_group))
207 pr_warn("%s: failed to create sysfs group for identification\n",
208 head->disk->disk_name);
209 }
210 mutex_unlock(&head->subsys->lock);
225} 211}
226 212
227void nvme_mpath_remove_disk(struct nvme_ns_head *head) 213void nvme_mpath_remove_disk(struct nvme_ns_head *head)
@@ -238,14 +224,3 @@ void nvme_mpath_remove_disk(struct nvme_ns_head *head)
238 blk_cleanup_queue(head->disk->queue); 224 blk_cleanup_queue(head->disk->queue);
239 put_disk(head->disk); 225 put_disk(head->disk);
240} 226}
241
242void nvme_mpath_remove_disk_links(struct nvme_ns *ns)
243{
244 if (!ns->head->disk)
245 return;
246
247 sysfs_remove_link(ns->disk->part0.holder_dir,
248 kobject_name(&disk_to_dev(ns->head->disk)->kobj));
249 sysfs_remove_link(ns->head->disk->slave_dir,
250 kobject_name(&disk_to_dev(ns->disk)->kobj));
251}