On Mar 16, 2022 / 15:11, Shin'ichiro Kawasaki wrote: (snip) > diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c > index 55488ba97823..64941615befc 100644 > --- a/block/blk-mq-sched.c > +++ b/block/blk-mq-sched.c > @@ -181,9 +181,15 @@ static int __blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx) > static int blk_mq_do_dispatch_sched(struct blk_mq_hw_ctx *hctx) > { > int ret; > + unsigned long end = jiffies + HZ; > > do { > ret = __blk_mq_do_dispatch_sched(hctx); > + if (ret == 1 && > + (need_resched() || time_is_after_jiffies(end))) { I've noticed that I made a horrible mistake. The time_is_after_jiffies(end) in the line above is wrong. It should be time_is_before_jiffies(end). My bad. Before I post v2 with this fix, I will ensure the fix by checking call frequency of blk_mq_delay_run_hw_queue using kprobe. > + blk_mq_delay_run_hw_queue(hctx, 0); > + break; > + } > } while (ret == 1); > > return ret; > -- > 2.34.1 > -- Best Regards, Shin'ichiro Kawasaki