nvmet: get transport reference for passthru ctrl
authorChristoph Hellwig <hch@lst.de>
Thu, 17 Sep 2020 01:11:01 +0000 (18:11 -0700)
committerChristoph Hellwig <hch@lst.de>
Thu, 17 Sep 2020 08:36:25 +0000 (10:36 +0200)
Grab a reference to the transport driver to ensure it can't be unloaded
while a passthrough controller is active.

Fixes: c1fef73f793b ("nvmet: add passthru code to process commands")
Reported-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Logan Gunthorpe <logang@deltatee.com>
drivers/nvme/target/passthru.c

index 8bd7f656e240b294f47c5f533976ce6ba8b1dfa5..dacfa7435d0b2f7161ccad95e8e575e18cdf7355 100644 (file)
@@ -517,6 +517,7 @@ int nvmet_passthru_ctrl_enable(struct nvmet_subsys *subsys)
                subsys->ver = NVME_VS(1, 2, 1);
        }
 
+       __module_get(subsys->passthru_ctrl->ops->module);
        mutex_unlock(&subsys->lock);
        return 0;
 
@@ -531,6 +532,7 @@ static void __nvmet_passthru_ctrl_disable(struct nvmet_subsys *subsys)
 {
        if (subsys->passthru_ctrl) {
                xa_erase(&passthru_subsystems, subsys->passthru_ctrl->cntlid);
+               module_put(subsys->passthru_ctrl->ops->module);
                nvme_put_ctrl(subsys->passthru_ctrl);
        }
        subsys->passthru_ctrl = NULL;