diff --git a/patches/linux-6.1.y/6259151c04d4e0085e00d2dcb471ebdd1778e72e.patch b/patches/linux-6.1.y/6259151c04d4e0085e00d2dcb471ebdd1778e72e.patch new file mode 100644 index 0000000000000..65eff32a4dfce --- /dev/null +++ b/patches/linux-6.1.y/6259151c04d4e0085e00d2dcb471ebdd1778e72e.patch @@ -0,0 +1,52 @@ +From 6259151c04d4e0085e00d2dcb471ebdd1778e72e Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Thu, 9 May 2024 10:01:48 -0700 +Subject: [PATCH] block: Call .limit_depth() after .hctx has been set + +Call .limit_depth() after data->hctx has been set such that data->hctx can +be used in .limit_depth() implementations. + +Cc: Christoph Hellwig +Cc: Damien Le Moal +Cc: Zhiguo Niu +Fixes: 07757588e507 ("block/mq-deadline: Reserve 25% of scheduler tags for synchronous requests") +Signed-off-by: Bart Van Assche +Tested-by: Zhiguo Niu +Reviewed-by: Christoph Hellwig +Link: https://lore.kernel.org/r/20240509170149.7639-2-bvanassche@acm.org +Signed-off-by: Jens Axboe +--- + block/blk-mq.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/block/blk-mq.c b/block/blk-mq.c +index fec2dea5c6e885..e3c3c0c21b5536 100644 +--- a/block/blk-mq.c ++++ b/block/blk-mq.c +@@ -448,6 +448,10 @@ static struct request *__blk_mq_alloc_requests(struct blk_mq_alloc_data *data) + if (data->cmd_flags & REQ_NOWAIT) + data->flags |= BLK_MQ_REQ_NOWAIT; + ++retry: ++ data->ctx = blk_mq_get_ctx(q); ++ data->hctx = blk_mq_map_queue(q, data->cmd_flags, data->ctx); ++ + if (q->elevator) { + /* + * All requests use scheduler tags when an I/O scheduler is +@@ -469,13 +473,9 @@ static struct request *__blk_mq_alloc_requests(struct blk_mq_alloc_data *data) + if (ops->limit_depth) + ops->limit_depth(data->cmd_flags, data); + } +- } +- +-retry: +- data->ctx = blk_mq_get_ctx(q); +- data->hctx = blk_mq_map_queue(q, data->cmd_flags, data->ctx); +- if (!(data->rq_flags & RQF_SCHED_TAGS)) ++ } else { + blk_mq_tag_busy(data->hctx); ++ } + + if (data->flags & BLK_MQ_REQ_RESERVED) + data->rq_flags |= RQF_RESV;