[v4,1/1] nvmet-fcloop: Do not wait on completion when unregister fails

Message ID 20230606122411.7972-2-dwagner@suse.de
State New
Headers
Series nvmet-fcloop: unblock module removal |

Commit Message

Daniel Wagner June 6, 2023, 12:24 p.m. UTC
  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>
---
 drivers/nvme/target/fcloop.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
  

Comments

Christoph Hellwig June 7, 2023, 7:36 a.m. UTC | #1
Looks good:

Reviewed-by: Christoph Hellwig <hch@lst.de>
  
Sagi Grimberg June 7, 2023, 3:09 p.m. UTC | #2
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
  
Keith Busch June 9, 2023, 3:48 p.m. UTC | #3
Thanks, applied for nvme-6.5.
  

Patch

diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c
index 1ab3d900f2bf..c65a73433c05 100644
--- a/drivers/nvme/target/fcloop.c
+++ b/drivers/nvme/target/fcloop.c
@@ -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);