scsi: megaraid_sas: Return immediately from wait_for_adapter_operational after kill...
authorShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Mon, 4 Jun 2018 10:45:11 +0000 (03:45 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 19 Jun 2018 01:05:32 +0000 (21:05 -0400)
While driver is waiting for adapter to become operational, if a kill
adapter is issued, driver can bail out from the wait loop immediately
rather than waiting for the entire 180 seconds.

Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c

index c787fed..fd2ce75 100644 (file)
@@ -6846,12 +6846,12 @@ megasas_wait_for_adapter_operational(struct megasas_instance *instance)
 {
        int wait_time = MEGASAS_RESET_WAIT_TIME * 2;
        int i;
-
-       if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR)
-               return 1;
+       u8 adp_state;
 
        for (i = 0; i < wait_time; i++) {
-               if (atomic_read(&instance->adprecovery) == MEGASAS_HBA_OPERATIONAL)
+               adp_state = atomic_read(&instance->adprecovery);
+               if ((adp_state == MEGASAS_HBA_OPERATIONAL) ||
+                   (adp_state == MEGASAS_HW_CRITICAL_ERROR))
                        break;
 
                if (!(i % MEGASAS_RESET_NOTICE_INTERVAL))
@@ -6860,9 +6860,10 @@ megasas_wait_for_adapter_operational(struct megasas_instance *instance)
                msleep(1000);
        }
 
-       if (atomic_read(&instance->adprecovery) != MEGASAS_HBA_OPERATIONAL) {
-               dev_info(&instance->pdev->dev, "%s timed out while waiting for HBA to recover.\n",
-                       __func__);
+       if (adp_state != MEGASAS_HBA_OPERATIONAL) {
+               dev_info(&instance->pdev->dev,
+                        "%s HBA failed to become operational, adp_state %d\n",
+                        __func__, adp_state);
                return 1;
        }