diff options
author | Christoph Hellwig <hch@lst.de> | 2017-10-18 13:25:42 +0200 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2017-10-27 09:04:07 +0300 |
commit | d22524a4782a943bb02a9cf6885ac470210aabfc (patch) | |
tree | 660bfba4f33f5a4cd6199bdca79f83438b70bcb6 /drivers/nvme/host/pci.c | |
parent | c6424a90da446cff6c67be06767fc0d0be787110 (diff) | |
download | lwn-d22524a4782a943bb02a9cf6885ac470210aabfc.tar.gz lwn-d22524a4782a943bb02a9cf6885ac470210aabfc.zip |
nvme: switch controller refcounting to use struct device
Instead of allocating a separate struct device for the character device
handle embedd it into struct nvme_ctrl and use it for the main controller
refcounting. This removes double refcounting and gets us an automatic
reference for the character device operations. We keep ctrl->device as a
pointer for now to avoid chaning printks all over, but in the future we
could look into message printing helpers that take a controller structure
similar to what other subsystems do.
Note the delete_ctrl operation always already has a reference (either
through sysfs due this change, or because every open file on the
/dev/nvme-fabrics node has a refernece) when it is entered now, so we
don't need to do the unless_zero variant there.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Diffstat (limited to 'drivers/nvme/host/pci.c')
-rw-r--r-- | drivers/nvme/host/pci.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index 11e6fd9d0ba4..7735571ffc9a 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -2292,7 +2292,7 @@ static void nvme_remove_dead_ctrl(struct nvme_dev *dev, int status) { dev_warn(dev->ctrl.device, "Removing after probe failure status: %d\n", status); - kref_get(&dev->ctrl.kref); + nvme_get_ctrl(&dev->ctrl); nvme_dev_disable(dev, false); if (!schedule_work(&dev->remove_work)) nvme_put_ctrl(&dev->ctrl); |