File tree Expand file tree Collapse file tree 5 files changed +20
-11
lines changed Expand file tree Collapse file tree 5 files changed +20
-11
lines changed Original file line number Diff line number Diff line change @@ -363,8 +363,10 @@ void blk_cleanup_queue(struct request_queue *q)
363363 blk_queue_flag_set (QUEUE_FLAG_DEAD , q );
364364
365365 blk_sync_queue (q );
366- if (queue_is_mq (q ))
366+ if (queue_is_mq (q )) {
367+ blk_mq_cancel_work_sync (q );
367368 blk_mq_exit_queue (q );
369+ }
368370
369371 /*
370372 * In theory, request pool of sched_tags belongs to request queue.
Original file line number Diff line number Diff line change @@ -4417,6 +4417,19 @@ unsigned int blk_mq_rq_cpu(struct request *rq)
44174417}
44184418EXPORT_SYMBOL (blk_mq_rq_cpu );
44194419
4420+ void blk_mq_cancel_work_sync (struct request_queue * q )
4421+ {
4422+ if (queue_is_mq (q )) {
4423+ struct blk_mq_hw_ctx * hctx ;
4424+ int i ;
4425+
4426+ cancel_delayed_work_sync (& q -> requeue_work );
4427+
4428+ queue_for_each_hw_ctx (q , hctx , i )
4429+ cancel_delayed_work_sync (& hctx -> run_work );
4430+ }
4431+ }
4432+
44204433static int __init blk_mq_init (void )
44214434{
44224435 int i ;
Original file line number Diff line number Diff line change @@ -128,6 +128,8 @@ extern void blk_mq_hctx_kobj_init(struct blk_mq_hw_ctx *hctx);
128128void blk_mq_free_plug_rqs (struct blk_plug * plug );
129129void blk_mq_flush_plug_list (struct blk_plug * plug , bool from_schedule );
130130
131+ void blk_mq_cancel_work_sync (struct request_queue * q );
132+
131133void blk_mq_release (struct request_queue * q );
132134
133135static inline struct blk_mq_ctx * __blk_mq_get_ctx (struct request_queue * q ,
Original file line number Diff line number Diff line change @@ -791,16 +791,6 @@ static void blk_release_queue(struct kobject *kobj)
791791
792792 blk_free_queue_stats (q -> stats );
793793
794- if (queue_is_mq (q )) {
795- struct blk_mq_hw_ctx * hctx ;
796- int i ;
797-
798- cancel_delayed_work_sync (& q -> requeue_work );
799-
800- queue_for_each_hw_ctx (q , hctx , i )
801- cancel_delayed_work_sync (& hctx -> run_work );
802- }
803-
804794 blk_exit_queue (q );
805795
806796 blk_queue_free_zone_bitmaps (q );
Original file line number Diff line number Diff line change @@ -1111,6 +1111,8 @@ static void disk_release(struct device *dev)
11111111 might_sleep ();
11121112 WARN_ON_ONCE (disk_live (disk ));
11131113
1114+ blk_mq_cancel_work_sync (disk -> queue );
1115+
11141116 disk_release_events (disk );
11151117 kfree (disk -> random );
11161118 xa_destroy (& disk -> part_tbl );
You can’t perform that action at this time.
0 commit comments