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)
363
363
blk_queue_flag_set (QUEUE_FLAG_DEAD , q );
364
364
365
365
blk_sync_queue (q );
366
- if (queue_is_mq (q ))
366
+ if (queue_is_mq (q )) {
367
+ blk_mq_cancel_work_sync (q );
367
368
blk_mq_exit_queue (q );
369
+ }
368
370
369
371
/*
370
372
* 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)
4417
4417
}
4418
4418
EXPORT_SYMBOL (blk_mq_rq_cpu );
4419
4419
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
+
4420
4433
static int __init blk_mq_init (void )
4421
4434
{
4422
4435
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);
128
128
void blk_mq_free_plug_rqs (struct blk_plug * plug );
129
129
void blk_mq_flush_plug_list (struct blk_plug * plug , bool from_schedule );
130
130
131
+ void blk_mq_cancel_work_sync (struct request_queue * q );
132
+
131
133
void blk_mq_release (struct request_queue * q );
132
134
133
135
static 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)
791
791
792
792
blk_free_queue_stats (q -> stats );
793
793
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
-
804
794
blk_exit_queue (q );
805
795
806
796
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)
1111
1111
might_sleep ();
1112
1112
WARN_ON_ONCE (disk_live (disk ));
1113
1113
1114
+ blk_mq_cancel_work_sync (disk -> queue );
1115
+
1114
1116
disk_release_events (disk );
1115
1117
kfree (disk -> random );
1116
1118
xa_destroy (& disk -> part_tbl );
You can’t perform that action at this time.
0 commit comments