diff options
| author | Chris Mason <mason@kernel.org> | 2026-10-28 10:42:33 -0600 |
|---|---|---|
| committer | Keith Busch <kbusch@kernel.org> | 2026-10-28 11:41:43 -0700 |
| commit | 14e4e09443ac2b5cd90c1e313ee3c0bdd4928e0d (patch) | |
| tree | 4168fcc6f27aa59fc3d96bb1588ee3e7c99d31ef /tools/lib/python/kdoc | |
| parent | 2b646788ee24d895b8862514e12a95ce5d72d6cc (diff) | |
nvmet-rdma: disable interrupts under rsp_wr_wait_lock
rsp_wr_wait_lock protects the list of commands waiting for room in the
send queue, and it's taken with plain spin_lock(). But
nvmet_rdma_queue_response() calls nvmet_rdma_release_rsp() directly if
ib_post_send() fails, and that processes the wait list. The call chain
starts in nvmet_req_complete(), which for a block device namespace runs
from the bio end_io callback, which can be in hard interrupt context.
An interrupt that completes a command on a CPU holding the lock for the
same queue spins forever. Lockdep over siw with a null_blk namespace:
inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage
Use spin_lock_irqsave() for both takers. The processing loop still
drops the lock, and restores the caller's interrupt state, around
nvmet_rdma_execute_command().
Fixes: 8f000cac6e7a ("nvmet-rdma: add a NVMe over Fabrics RDMA target driver")
Cc: Christoph Hellwig <hch@lst.de>
Cc: Sagi Grimberg <sagi@grimberg.me>
Cc: Chaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: Chris Mason <mason@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Diffstat (limited to 'tools/lib/python/kdoc')
0 files changed, 0 insertions, 0 deletions
