aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian King <brking@linux.vnet.ibm.com>2016-07-15 15:48:03 -0400
committerMartin K. Petersen <martin.petersen@oracle.com>2016-07-27 00:32:07 -0400
commitb195d5e2bffd3de3f07e8683e6abddf099ea0822 (patch)
tree8b605a7a6e0b292df21074f70be25ab975cf82d9
parentb2c0627c26afcef0ac115e9505ea9d1db5d88c9b (diff)
ipr: Wait to do async scan until scsi host is initialized
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> Reviewed-by: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/ipr.c9
-rw-r--r--drivers/scsi/ipr.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 1f539c288ae8..95e4834c58ee 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -3288,6 +3288,11 @@ static void ipr_worker_thread(struct work_struct *work)
3288 return; 3288 return;
3289 } 3289 }
3290 3290
3291 if (!ioa_cfg->scan_enabled) {
3292 spin_unlock_irqrestore(ioa_cfg->host->host_lock, lock_flags);
3293 return;
3294 }
3295
3291restart: 3296restart:
3292 do { 3297 do {
3293 did_work = 0; 3298 did_work = 0;
@@ -10362,6 +10367,7 @@ static void ipr_remove(struct pci_dev *pdev)
10362static int ipr_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id) 10367static int ipr_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id)
10363{ 10368{
10364 struct ipr_ioa_cfg *ioa_cfg; 10369 struct ipr_ioa_cfg *ioa_cfg;
10370 unsigned long flags;
10365 int rc, i; 10371 int rc, i;
10366 10372
10367 rc = ipr_probe_ioa(pdev, dev_id); 10373 rc = ipr_probe_ioa(pdev, dev_id);
@@ -10414,7 +10420,10 @@ static int ipr_probe(struct pci_dev *pdev, const struct pci_device_id *dev_id)
10414 } 10420 }
10415 } 10421 }
10416 10422
10423 spin_lock_irqsave(ioa_cfg->host->host_lock, flags);
10424 ioa_cfg->scan_enabled = 1;
10417 schedule_work(&ioa_cfg->work_q); 10425 schedule_work(&ioa_cfg->work_q);
10426 spin_unlock_irqrestore(ioa_cfg->host->host_lock, flags);
10418 return 0; 10427 return 0;
10419} 10428}
10420 10429
diff --git a/drivers/scsi/ipr.h b/drivers/scsi/ipr.h
index 1d42c7464dfc..cdb51960b53c 100644
--- a/drivers/scsi/ipr.h
+++ b/drivers/scsi/ipr.h
@@ -1478,6 +1478,7 @@ struct ipr_ioa_cfg {
1478 u8 in_ioa_bringdown:1; 1478 u8 in_ioa_bringdown:1;
1479 u8 ioa_unit_checked:1; 1479 u8 ioa_unit_checked:1;
1480 u8 dump_taken:1; 1480 u8 dump_taken:1;
1481 u8 scan_enabled:1;
1481 u8 scan_done:1; 1482 u8 scan_done:1;
1482 u8 needs_hard_reset:1; 1483 u8 needs_hard_reset:1;
1483 u8 dual_raid:1; 1484 u8 dual_raid:1;