diff mbox

[1/1] ipr: Wait to do async scan until scsi host is initialized

Message ID 20160715194804.89BFD2803D@b01ledav001.gho.pok.ibm.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Brian King July 15, 2016, 7:48 p.m. UTC
When performing an async scan, make sure the kthread doing scanning
doesn't start before the scsi host is fully initialized.

Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
---

 drivers/scsi/ipr.c |    9 +++++++++
 drivers/scsi/ipr.h |    1 +
 2 files changed, 10 insertions(+)

Comments

Gabriel Krisman Bertazi July 26, 2016, 2:07 p.m. UTC | #1
Brian King <brking@linux.vnet.ibm.com> writes:

> When performing an async scan, make sure the kthread doing scanning
> doesn't start before the scsi host is fully initialized.
>

Reviewed-by: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
Martin K. Petersen July 27, 2016, 4:09 a.m. UTC | #2
>>>>> "Brian" == Brian King <brking@linux.vnet.ibm.com> writes:

Brian> When performing an async scan, make sure the kthread doing
Brian> scanning doesn't start before the scsi host is fully initialized.

Applied to 4.8/scsi-queue.
diff mbox

Patch

diff -puN drivers/scsi/ipr.c~ipr_async_scan_fixup drivers/scsi/ipr.c
--- linux-2.6.git/drivers/scsi/ipr.c~ipr_async_scan_fixup	2016-07-15 14:47:13.412003811 -0500
+++ linux-2.6.git-bjking1/drivers/scsi/ipr.c	2016-07-15 14:47:13.422003757 -0500
@@ -3288,6 +3288,11 @@  static void ipr_worker_thread(struct wor
 		return;
 	}
 
+	if (!ioa_cfg->scan_enabled) {
+		spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
+		return;
+	}
+
 restart:
 	do {
 		did_work = 0;
@@ -10362,6 +10367,7 @@  static void ipr_remove(struct pci_dev *p
 static int ipr_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id)
 {
 	struct ipr_ioa_cfg *ioa_cfg;
+	unsigned long flags;
 	int rc, i;
 
 	rc = ipr_probe_ioa(pdev, dev_id);
@@ -10414,7 +10420,10 @@  static int ipr_probe(struct pci_dev *pde
 		}
 	}
 
+	spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
+	ioa_cfg->scan_enabled = 1;
 	schedule_work(&ioa_cfg->work_q);
+	spin_unlock_irqrestore(ioa_cfg->host->host_lock, flags);
 	return 0;
 }
 
diff -puN drivers/scsi/ipr.h~ipr_async_scan_fixup drivers/scsi/ipr.h
--- linux-2.6.git/drivers/scsi/ipr.h~ipr_async_scan_fixup	2016-07-15 14:47:13.415003795 -0500
+++ linux-2.6.git-bjking1/drivers/scsi/ipr.h	2016-07-15 14:47:13.424003746 -0500
@@ -1478,6 +1478,7 @@  struct ipr_ioa_cfg {
 	u8 in_ioa_bringdown:1;
 	u8 ioa_unit_checked:1;
 	u8 dump_taken:1;
+	u8 scan_enabled:1;
 	u8 scan_done:1;
 	u8 needs_hard_reset:1;
 	u8 dual_raid:1;