On Mon, Dec 13, 2021 at 09:16:51AM -0800, Christoph Hellwig wrote: > On Mon, Dec 13, 2021 at 12:09:07PM +0800, Laibin Qiu wrote: > > Submit_bio > > scsi_remove_device > > sd_remove > > del_gendisk > > blk_unregister_queue > > elv_unregister_queue > > wbt_enable_default > > <= Set rwb->enable_state (ON) > > q_qos_track > > <= rwb->enable_state (ON) > > ^^^^^^ this request will mark WBT_TRACKED without inflight add and will > > lead to drop rqw->inflight to -1 in wbt_done() which will trigger IO hung. > > > > Fix this by judge whether QUEUE_FLAG_REGISTERED is marked to distinguish > > scsi remove scene. > > Fixes: 76a8040817b4b ("blk-wbt: make sure throttle is enabled properly") > > Signed-off-by: Laibin Qiu <qiulaibin@xxxxxxxxxx> > > --- > > block/blk-wbt.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > > > > diff --git a/block/blk-wbt.c b/block/blk-wbt.c > > index 3ed71b8da887..537f77bb1365 100644 > > --- a/block/blk-wbt.c > > +++ b/block/blk-wbt.c > > @@ -637,6 +637,10 @@ void wbt_enable_default(struct request_queue *q) > > { > > struct rq_qos *rqos = wbt_rq_qos(q); > > > > + /* Queue not registered? Maybe shutting down... */ > > + if (!blk_queue_registered(q)) > > + return; > > Wouldn't it make more sense to simply not call wbt_enable_default from > elv_unregister_queue? wbt_disable_default() is called in bfq_init_root_group(), so wbt_enable_default should be moved to bfq_exit_queue()? Thanks, Ming