diff --git a/block/blk-core.c b/block/blk-core.c index 4eea979b78c8d8148dc31e66f354a6d10d214f8c..a90b79c06b05db9e31e0384bc1e2d7b47ec1c3c3 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -407,15 +407,8 @@ void blk_sync_queue(struct request_queue *q) del_timer_sync(&q->timeout); cancel_work_sync(&q->timeout_work); - if (q->mq_ops) { - struct blk_mq_hw_ctx *hctx; - int i; - - queue_for_each_hw_ctx(q, hctx, i) - cancel_delayed_work_sync(&hctx->run_work); - } else { + if (!q->mq_ops) cancel_delayed_work_sync(&q->delay_work); - } } EXPORT_SYMBOL(blk_sync_queue); diff --git a/block/blk-mq-sysfs.c b/block/blk-mq-sysfs.c index f931086bd2b2efe952058a0a831ab310956576c9..5ffaf379d683c5537fdd7e9eb87175b390fda224 100644 --- a/block/blk-mq-sysfs.c +++ b/block/blk-mq-sysfs.c @@ -35,6 +35,8 @@ static void blk_mq_hw_sysfs_release(struct kobject *kobj) struct blk_mq_hw_ctx *hctx = container_of(kobj, struct blk_mq_hw_ctx, kobj); + cancel_delayed_work_sync(&hctx->run_work); + if (hctx->flags & BLK_MQ_F_BLOCKING) cleanup_srcu_struct(hctx->srcu); blk_free_flush_queue(hctx->fq);