Patch "block: Fix a race between blk_cleanup_queue() and timeout handling" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
block: Fix a race between blk_cleanup_queue() and timeout handling
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
block-fix-a-race-between-blk_cleanup_queue-and-timeout-handling.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4e9b6f20828ac880dbc1fa2fdbafae779473d1afMon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Thu, 19 Oct 2017 10:00:48 -0700
Subject: block: Fix a race between blk_cleanup_queue() and timeout handling
From: Bart Van Assche <[email protected]>
commit 4e9b6f20828ac880dbc1fa2fdbafae779473d1af upstream.
Make sure that if the timeout timer fires after a queue has been marked "dying" that the affected requests are finished.
--- block/blk-core.c | 2 ++ block/blk-timeout.c | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-)
block/blk-core.c +2 -0
@@ -282,6 +282,7 @@ EXPORT_SYMBOL(blk_stop_queue);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;
@@ -720,6 +721,7 @@ struct request_queue *blk_alloc_queue_nosetup_timer (&q->backing_dev_info.laptop_mode_wb_timer, laptop_mode_timer_fn, (unsigned long ) q);setup_timer (&q->timeout, blk_rq_timed_out_timer, (unsigned long ) q); +INIT_WORK (&q->timeout_work,NULL );INIT_LIST_HEAD (&q->queue_head);INIT_LIST_HEAD (&q->timeout_list);INIT_LIST_HEAD (&q->icq_list);
block/blk-timeout.c +0 -3
@@ -135,8 +135,6 @@ void blk_timeout_work(struct work_structstruct request *rq, *tmp;int next_set =0 ; -if (blk_queue_enter (q, true)) -return ;spin_lock_irqsave (q->queue_lock, flags);list_for_each_entry_safe (rq, tmp, &q->timeout_list, timeout_list)
@@ -146,7 +144,6 @@ void blk_timeout_work(struct work_structmod_timer (&q->timeout,round_jiffies_up (next));spin_unlock_irqrestore (q->queue_lock, flags); -blk_queue_exit (q); }/**
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/block-fix-a-race-between-blk_cleanup_queue-and-timeout-handling.patch