On Tue, Feb 15, 2022 at 01:11:24PM +0100, Sebastian Andrzej Siewior wrote: > On 2022-02-15 19:58:03 [+0800], Ming Lei wrote: > > On Tue, Feb 15, 2022 at 10:31:49AM +0100, Sebastian Andrzej Siewior wrote: > > > On 2022-02-15 17:23:45 [+0800], Ming Lei wrote: > > > > > diff --git a/block/blk-mq.c b/block/blk-mq.c > > > > > index 1adfe4824ef5e..90217f1b09add 100644 > > > > > --- a/block/blk-mq.c > > > > > +++ b/block/blk-mq.c > > > > > @@ -2040,14 +2040,10 @@ static void __blk_mq_delay_run_hw_queue(struct blk_mq_hw_ctx *hctx, bool async, > > > > > return; > > > > > > > > > > if (!async && !(hctx->flags & BLK_MQ_F_BLOCKING)) { > > > > > - int cpu = get_cpu(); > > > > > > > > Did you observe the warning triggered? might_sleep_if(true) in > > > > __blk_mq_run_dispatch_ops() is only supposed to be run in case of > > > > (hctx->flags & BLK_MQ_F_BLOCKING). > > > > > > I haven't seen it triggering but if that call chain is possible then it > > > will triggert due to get_cpu(). > > > > As I mentioned, the call chain isn't possible. > > Why not? Is BLK_MQ_F_BLOCKING and blk_queue_has_srcu() exclusive? blk_queue_has_srcu() returns true iff BLK_MQ_F_BLOCKING is set. thanks, Ming