Hi, On Sun, Apr 5, 2020 at 2:15 AM Ming Lei <ming.lei@xxxxxxxxxx> wrote: > > @@ -103,6 +104,9 @@ static void blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx) > rq = e->type->ops.dispatch_request(hctx); > if (!rq) { > blk_mq_put_dispatch_budget(hctx); > + > + if (e->type->ops.has_work && e->type->ops.has_work(hctx)) > + blk_mq_delay_run_hw_queue(hctx, BLK_MQ_BUDGET_DELAY); To really close the race, don't we need to run all the queues associated with the hctx? I haven't traced it through, but I've been assuming that the multiple "hctx"s associated with the same queue will have the same budget associated with them and thus they can block each other out. -Doug