]> www.infradead.org Git - nvme.git/commitdiff
nvmet-fcloop: Do not wait on completion when unregister fails
authorDaniel Wagner <dwagner@suse.de>
Tue, 6 Jun 2023 12:24:11 +0000 (14:24 +0200)
committerKeith Busch <kbusch@kernel.org>
Mon, 12 Jun 2023 17:37:00 +0000 (10:37 -0700)
The nvme_fc_unregister_localport() returns an error code in case that
the locaport pointer is NULL or has already been unegisterd. localport is
is either in the ONLINE state (all resources allocated) or has already
been put into DELETED state.

In this case we will never receive an wakeup call and thus any caller
will hang, e.g. module unload.

Signed-off-by: Daniel Wagner <dwagner@suse.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/target/fcloop.c

index 1ab3d900f2bf6296a9a6741d835263868e043da3..c65a73433c05f643654616175d5fc9229af753e7 100644 (file)
@@ -1166,7 +1166,8 @@ __wait_localport_unreg(struct fcloop_lport *lport)
 
        ret = nvme_fc_unregister_localport(lport->localport);
 
-       wait_for_completion(&lport->unreg_done);
+       if (!ret)
+               wait_for_completion(&lport->unreg_done);
 
        kfree(lport);