From: Hannes Reinecke <hare@suse.de>
To: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>, Keith Busch <kbusch@kernel.org>,
linux-nvme@lists.infradead.org, Hannes Reinecke <hare@suse.de>
Subject: [PATCH 1/2] nvmet-rdma: avoid circular locking dependency on install_queue()
Date: Wed, 1 Nov 2023 11:32:27 +0100 [thread overview]
Message-ID: <20231101103228.136570-2-hare@suse.de> (raw)
In-Reply-To: <20231101103228.136570-1-hare@suse.de>
nvmet_rdma_install_queue() is driven from the ->io_work workqueue
function, but will call flush_workqueue() which might trigger
->release_work() which in itself calls flush_work on ->io_work.
To avoid that check for pending queue in disconnecting status,
and return 'controller busy' until all disconnects are completed.
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/nvme/target/rdma.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/nvme/target/rdma.c b/drivers/nvme/target/rdma.c
index 4597bca43a6d..eaeb94a9e863 100644
--- a/drivers/nvme/target/rdma.c
+++ b/drivers/nvme/target/rdma.c
@@ -1583,8 +1583,18 @@ static int nvmet_rdma_queue_connect(struct rdma_cm_id *cm_id,
}
if (queue->host_qid == 0) {
- /* Let inflight controller teardown complete */
- flush_workqueue(nvmet_wq);
+ struct nvmet_rdma_queue *q;
+ int pending = 0;
+
+ mutex_lock(&nvmet_rdma_queue_mutex);
+ list_for_each_entry(q, &nvmet_rdma_queue_list, queue_list) {
+ if (q->state == NVMET_RDMA_Q_DISCONNECTING)
+ pending++;
+ }
+ mutex_unlock(&nvmet_rdma_queue_mutex);
+ /* Retry for pending controller teardown */
+ if (pending)
+ return NVME_SC_CONNECT_CTRL_BUSY;
}
ret = nvmet_rdma_cm_accept(cm_id, queue, &event->param.conn);
--
2.35.3
next prev parent reply other threads:[~2023-11-01 10:32 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-01 10:32 [PATCH 0/2] nvmet: avoid circular locking warning Hannes Reinecke
2023-11-01 10:32 ` Hannes Reinecke [this message]
2023-11-01 16:21 ` [PATCH 1/2] nvmet-rdma: avoid circular locking dependency on install_queue() Jens Axboe
2023-11-01 17:28 ` Hannes Reinecke
2023-11-01 10:32 ` [PATCH 2/2] nvmet-tcp: " Hannes Reinecke
2023-11-01 12:40 ` [PATCH 0/2] nvmet: avoid circular locking warning Shinichiro Kawasaki
-- strict thread matches above, loose matches on Subject: below --
2023-11-02 14:19 [PATCHv2 " Hannes Reinecke
2023-11-02 14:19 ` [PATCH 1/2] nvmet-rdma: avoid circular locking dependency on install_queue() Hannes Reinecke
2023-11-03 8:23 ` Christoph Hellwig
2023-11-03 8:53 ` Hannes Reinecke
2023-11-03 9:19 ` Christoph Hellwig
2023-11-03 11:58 ` Hannes Reinecke
2023-11-03 14:05 ` Christoph Hellwig
2023-11-20 13:48 ` Sagi Grimberg
2023-12-04 10:19 ` Sagi Grimberg
2023-12-04 11:49 ` Hannes Reinecke
2023-12-04 11:57 ` Sagi Grimberg
2023-12-04 12:31 ` Hannes Reinecke
2023-12-04 12:46 ` Sagi Grimberg
2023-12-07 5:54 ` Shinichiro Kawasaki
2023-12-07 12:17 ` Sagi Grimberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231101103228.136570-2-hare@suse.de \
--to=hare@suse.de \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=sagi@grimberg.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.