Patch "scsi: Avoid that SCSI queues get stuck" has been added to the 4.10-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
scsi: Avoid that SCSI queues get stuck
to the 4.10-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:
scsi-avoid-that-scsi-queues-get-stuck.patch
and it can be found in the queue-4.10 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
36e3cf273977da34a760d513e1bef8431a9abaa0Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Fri, 7 Apr 2017 11:16:53 -0700
Subject: scsi: Avoid that SCSI queues get stuck
From: Bart Van Assche <[email protected]>
commit 36e3cf273977da34a760d513e1bef8431a9abaa0 upstream.
If a .queue_rq() function returns BLK_MQ_RQ_QUEUE_BUSY then the block driver that implements that function is responsible for rerunning the hardware queue once requests can be queued again successfully.
commit 52d7f1b5c2f3 ("blk-mq: Avoid that requeueing starts stopped queues") removed the blk_mq_stop_hw_queue() call from scsi_queue_rq() for the BLK_MQ_RQ_QUEUE_BUSY case. Hence change all calls to functions that are intended to rerun a busy queue such that these examine all hardware queues instead of only stopped queues.
Since no other functions than scsi_internal_device_block() and scsi_internal_device_unblock() should ever stop or restart a SCSI queue, change the blk_mq_delay_queue() call into a blk_mq_delay_run_hw_queue() call.
--- drivers/scsi/scsi_lib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/scsi/scsi_lib.c +3 -3
@@ -468,7 +468,7 @@ static void scsi_run_queue(struct requesscsi_starved_list_run (sdev->host);if (q->mq_ops) -blk_mq_start_stopped_hw_queues (q, false); +blk_mq_run_hw_queues (q, false);else blk_run_queue (q); }
@@ -639,7 +639,7 @@ static bool scsi_end_request(struct requ !list_empty(&sdev->host->starved_list))kblockd_schedule_work (&sdev->requeue_work); else -blk_mq_start_stopped_hw_queues (q ,true ); +blk_mq_run_hw_queues (q ,true ); }else {unsigned long flags;
@@ -1953,7 +1953,7 @@ out:case BLK_MQ_RQ_QUEUE_BUSY :if (atomic_read (&sdev->device_busy) ==0 && !scsi_device_blocked (sdev)) -blk_mq_delay_queue (hctx,SCSI_QUEUE_DELAY ); +blk_mq_delay_run_hw_queue (hctx,SCSI_QUEUE_DELAY );break ;case BLK_MQ_RQ_QUEUE_ERROR :/*
Patches currently in stable-queue which might be from [email protected] are
queue-4.10/scsi-avoid-that-scsi-queues-get-stuck.patch