Skip to content

Commit

Permalink
nvme: lightnvm: attach lightnvm sysfs to nvme block device
Browse files Browse the repository at this point in the history
Previously, LBA read and write were not supported in the lightnvm
specification. Now that it supports it, lets use the traditional
NVMe gendisk, and attach the lightnvm sysfs geometry export.

Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@fb.com>
  • Loading branch information
MatiasBjorling authored and axboe committed Nov 29, 2016
1 parent 7498e99 commit 3dc87dd
Show file tree
Hide file tree
Showing 8 changed files with 197 additions and 298 deletions.
2 changes: 1 addition & 1 deletion drivers/lightnvm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
# Makefile for Open-Channel SSDs.
#

obj-$(CONFIG_NVM) := core.o sysblk.o sysfs.o
obj-$(CONFIG_NVM) := core.o sysblk.o
obj-$(CONFIG_NVM_GENNVM) += gennvm.o
obj-$(CONFIG_NVM_RRPC) += rrpc.o
15 changes: 1 addition & 14 deletions drivers/lightnvm/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
#include <linux/lightnvm.h>
#include <linux/sched/sysctl.h>

#include "lightnvm.h"

static LIST_HEAD(nvm_tgt_types);
static DECLARE_RWSEM(nvm_tgtt_lock);
static LIST_HEAD(nvm_mgrs);
Expand Down Expand Up @@ -657,11 +655,6 @@ static int nvm_init(struct nvm_dev *dev)
return ret;
}

static void nvm_exit(struct nvm_dev *dev)
{
nvm_sysfs_unregister_dev(dev);
}

struct nvm_dev *nvm_alloc_dev(int node)
{
return kzalloc_node(sizeof(struct nvm_dev), GFP_KERNEL, node);
Expand Down Expand Up @@ -691,10 +684,6 @@ int nvm_register(struct nvm_dev *dev)
}
}

ret = nvm_sysfs_register_dev(dev);
if (ret)
goto err_ppalist;

if (dev->identity.cap & NVM_ID_DCAP_BBLKMGMT) {
ret = nvm_get_sysblock(dev, &dev->sb);
if (!ret)
Expand All @@ -711,8 +700,6 @@ int nvm_register(struct nvm_dev *dev)
up_write(&nvm_lock);

return 0;
err_ppalist:
dev->ops->destroy_dma_pool(dev->dma_pool);
err_init:
kfree(dev->lun_map);
return ret;
Expand All @@ -725,7 +712,7 @@ void nvm_unregister(struct nvm_dev *dev)
list_del(&dev->devices);
up_write(&nvm_lock);

nvm_exit(dev);
nvm_free(dev);
}
EXPORT_SYMBOL(nvm_unregister);

Expand Down
35 changes: 0 additions & 35 deletions drivers/lightnvm/lightnvm.h

This file was deleted.

198 changes: 0 additions & 198 deletions drivers/lightnvm/sysfs.c

This file was deleted.

43 changes: 21 additions & 22 deletions drivers/nvme/host/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1673,27 +1673,24 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
if (nvme_revalidate_ns(ns, &id))
goto out_free_queue;

if (nvme_nvm_ns_supported(ns, id)) {
if (nvme_nvm_register(ns, disk_name, node,
&nvme_ns_attr_group)) {
dev_warn(ctrl->dev, "%s: LightNVM init failure\n",
__func__);
goto out_free_id;
}
} else {
disk = alloc_disk_node(0, node);
if (!disk)
goto out_free_id;
if (nvme_nvm_ns_supported(ns, id) &&
nvme_nvm_register(ns, disk_name, node)) {
dev_warn(ctrl->dev, "%s: LightNVM init failure\n", __func__);
goto out_free_id;
}

disk->fops = &nvme_fops;
disk->private_data = ns;
disk->queue = ns->queue;
disk->flags = GENHD_FL_EXT_DEVT;
memcpy(disk->disk_name, disk_name, DISK_NAME_LEN);
ns->disk = disk;
disk = alloc_disk_node(0, node);
if (!disk)
goto out_free_id;

__nvme_revalidate_disk(disk, id);
}
disk->fops = &nvme_fops;
disk->private_data = ns;
disk->queue = ns->queue;
disk->flags = GENHD_FL_EXT_DEVT;
memcpy(disk->disk_name, disk_name, DISK_NAME_LEN);
ns->disk = disk;

__nvme_revalidate_disk(disk, id);

mutex_lock(&ctrl->namespaces_mutex);
list_add_tail(&ns->list, &ctrl->namespaces);
Expand All @@ -1703,14 +1700,14 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)

kfree(id);

if (ns->ndev)
return;

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);
if (ns->ndev && nvme_nvm_register_sysfs(ns))
pr_warn("%s: failed to register lightnvm sysfs group for identification\n",
ns->disk->disk_name);
return;
out_free_id:
kfree(id);
Expand All @@ -1732,6 +1729,8 @@ static void nvme_ns_remove(struct nvme_ns *ns)
blk_integrity_unregister(ns->disk);
sysfs_remove_group(&disk_to_dev(ns->disk)->kobj,
&nvme_ns_attr_group);
if (ns->ndev)
nvme_nvm_unregister_sysfs(ns);
del_gendisk(ns->disk);
blk_mq_abort_requeue_list(ns->queue);
blk_cleanup_queue(ns->queue);
Expand Down
Loading

0 comments on commit 3dc87dd

Please sign in to comment.