Patch "scsi: hpsa: limit outstanding rescans" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
scsi: hpsa: limit outstanding rescans
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:
scsi-hpsa-limit-outstanding-rescans.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 foo@baz Mon Dec 18 14:12:34 CET 2017
From: Don Brace <[email protected]>
Date: Fri, 10 Mar 2017 14:35:17 -0600
Subject: scsi: hpsa: limit outstanding rescans
From: Don Brace <[email protected]>
[ Upstream commit 87b9e6aa87d9411f1059aa245c0c79976bc557ac ]
Avoid rescan storms. No need to queue another if one is pending.
--- drivers/scsi/hpsa.c | 16 +++++++++++++++- drivers/scsi/hpsa.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-)
drivers/scsi/hpsa.c +15 -1
@@ -5529,7 +5529,7 @@ static void hpsa_scan_complete(struct ctspin_lock_irqsave (&h->scan_lock, flags); h->scan_finished =1 ; -wake_up_all (&h->scan_wait_queue); +wake_up (&h->scan_wait_queue);spin_unlock_irqrestore (&h->scan_lock, flags); }
@@ -5547,11 +5547,23 @@ static void hpsa_scan_start(struct Scsi_if (unlikely (lockup_detected (h)))return hpsa_scan_complete (h); +/* +* If a scan is already waiting to run, no need to add another +*/ +spin_lock_irqsave (&h->scan_lock, flags); +if (h->scan_waiting) { +spin_unlock_irqrestore (&h->scan_lock, flags); +return ; + } + +spin_unlock_irqrestore (&h->scan_lock, flags); +/* wait until any scan already in progress is finished. */ while (1 ) {spin_lock_irqsave (&h->scan_lock, flags);if (h->scan_finished)break ; + h->scan_waiting =1 ;spin_unlock_irqrestore (&h->scan_lock, flags);wait_event (h->scan_wait_queue, h->scan_finished);/* Note: We don't need to worry about a race between this
@@ -5561,6 +5573,7 @@ static void hpsa_scan_start(struct Scsi_*/ } h->scan_finished =0 ;/* mark scan as in progress */ + h->scan_waiting =0 ;spin_unlock_irqrestore (&h->scan_lock, flags);if (unlikely (lockup_detected (h)))
@@ -8799,6 +8812,7 @@ reinit_after_soft_reset:init_waitqueue_head (&h->event_sync_wait_queue);mutex_init (&h->reset_mutex); h->scan_finished =1 ;/* no scan currently in progress */ + h->scan_waiting =0 ;pci_set_drvdata (pdev, h); h->ndevices =0 ;
drivers/scsi/hpsa.h +1 -0
@@ -203,6 +203,7 @@ struct ctlr_info {dma_addr_t errinfo_pool_dhandle;unsigned long *cmd_pool_bits;int scan_finished; + u8 scan_waiting : 1;spinlock_t scan_lock;wait_queue_head_t scan_wait_queue;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/scsi-hpsa-limit-outstanding-rescans.patch queue-4.9/scsi-hpsa-cleanup-sas_phy-structures-in-sysfs-when-unloading.patch queue-4.9/scsi-hpsa-destroy-sas-transport-properties-before-scsi_host.patch queue-4.9/scsi-hpsa-do-not-timeout-reset-operations.patch queue-4.9/scsi-hpsa-update-check-for-logical-volume-status.patch