diff mbox series

blk-mq: ensure polled hctx is valid

Message ID 20230322203812.674738-1-kbusch@meta.com (mailing list archive)
State New, archived
Headers show
Series blk-mq: ensure polled hctx is valid | expand

Commit Message

Keith Busch March 22, 2023, 8:38 p.m. UTC
From: Keith Busch <kbusch@kernel.org>

Imagine two threads polling the same queue while that queue is trying to
reallocate its hardware contexts. Both threads see their bios' valid
cookie value. The first polling thread completes all outstanding bios,
then the queue rebalances the hctx's. The 2nd polling thread attempts to
poll its now outdated cookie which may not have an hctx, or may not be a
polling type anymore. Check for both.

Signed-off-by: Keith Busch <kbusch@kernel.org>
---
 block/blk-mq.c | 3 +++
 1 file changed, 3 insertions(+)
diff mbox series

Patch

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 932d2e95392e6..37d8a2f4d5da8 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -4721,6 +4721,9 @@  int blk_mq_poll(struct request_queue *q, blk_qc_t cookie, struct io_comp_batch *
 	long state = get_current_state();
 	int ret;
 
+	if (!hctx || hctx->type != HCTX_TYPE_POLL)
+		return 0;
+
 	do {
 		ret = q->mq_ops->poll(hctx, iob);
 		if (ret > 0) {