nvme-core: put ctrl ref when module ref get fail
authorChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Tue, 6 Oct 2020 23:36:47 +0000 (16:36 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 7 Oct 2020 05:55:40 +0000 (07:55 +0200)
When try_module_get() fails in the nvme_dev_open() it returns without
releasing the ctrl reference which was taken earlier.

Put the ctrl reference which is taken before calling the
try_module_get() in the error return code path.

Fixes: 52a3974feb1a "nvme-core: get/put ctrl and transport module in nvme_dev_open/release()"
Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/nvme/host/core.c

index 53c93836c7c6f00c159b8e788cbedae41caf5fd6..ca516d68f14fcb22567358b1d4e1d7c1797e365d 100644 (file)
@@ -3265,8 +3265,10 @@ static int nvme_dev_open(struct inode *inode, struct file *file)
        }
 
        nvme_get_ctrl(ctrl);
-       if (!try_module_get(ctrl->ops->module))
+       if (!try_module_get(ctrl->ops->module)) {
+               nvme_put_ctrl(ctrl);
                return -EINVAL;
+       }
 
        file->private_data = ctrl;
        return 0;