diff mbox series

[V2] blk-mq: fix warning in blk_mq_start_request

Message ID tencent_6E1A9EAE1BB04B3A1B592506BAEABB313308@qq.com (mailing list archive)
State New, archived
Headers show
Series [V2] blk-mq: fix warning in blk_mq_start_request | expand

Commit Message

Edward Adam Davis Nov. 8, 2023, 6:59 a.m. UTC
Before call queue_rq(), initialize rq->state to MQ_RQ_IDLE.

Reported-and-tested-by: syzbot+fcc47ba2476570cbbeb0@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
---
 block/blk-mq.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Christoph Hellwig Nov. 8, 2023, 7:26 a.m. UTC | #1
On Wed, Nov 08, 2023 at 02:59:40PM +0800, Edward Adam Davis wrote:
> Before call queue_rq(), initialize rq->state to MQ_RQ_IDLE.

Request should never be able to be allocated if they aren't in
MQ_RQ_IDLE.  So papering over it here is not the right fix, we need
to figure out got it ends up being marked free in the bitmap while
not idle.
diff mbox series

Patch

diff --git a/block/blk-mq.c b/block/blk-mq.c
index e2d11183f62e..26f2921cbc50 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2575,6 +2575,8 @@  static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx,
 	 * Any other error (busy), just add it to our list as we
 	 * previously would have done.
 	 */
+	if (READ_ONCE(rq->state))
+		WRITE_ONCE(rq->state, MQ_RQ_IDLE);
 	ret = q->mq_ops->queue_rq(hctx, &bd);
 	switch (ret) {
 	case BLK_STS_OK: