[PATCH 1/7] nvme-fcloop: flush workqueue before calling nvme_fc_unregister_remoteport()
Hannes Reinecke
hare at suse.de
Tue Sep 22 08:14:55 EDT 2020
nvme_fc_unregister_remoteport() will be sending LS requests, which then
would end up on a workqueue for processing. This will deadlock with
fcloop_remoteport_delete() which would try to flush the very same queue.
Signed-off-by: Hannes Reinecke <hare at suse.de>
---
drivers/nvme/target/fcloop.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvme/target/fcloop.c b/drivers/nvme/target/fcloop.c
index c97e60b71bbc..082aa4dee406 100644
--- a/drivers/nvme/target/fcloop.c
+++ b/drivers/nvme/target/fcloop.c
@@ -979,7 +979,6 @@ fcloop_remoteport_delete(struct nvme_fc_remote_port *remoteport)
{
struct fcloop_rport *rport = remoteport->private;
- flush_work(&rport->ls_work);
fcloop_nport_put(rport->nport);
}
@@ -1313,6 +1312,7 @@ __remoteport_unreg(struct fcloop_nport *nport, struct fcloop_rport *rport)
if (!rport)
return -EALREADY;
+ flush_work(&rport->ls_work);
return nvme_fc_unregister_remoteport(rport->remoteport);
}
--
2.16.4
More information about the Linux-nvme
mailing list