scsi: megaraid_sas: Call megasas_complete_cmd_dpc_fusion every 1 second while there...
authorShivasharan S <shivasharan.srikanteshwara@broadcom.com>
Wed, 23 Aug 2017 11:46:58 +0000 (04:46 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 25 Aug 2017 02:29:11 +0000 (22:29 -0400)
megasas_wait_for_outstanding_fusion checks for pending commands every 1
second. But megasas_complete_cmd_dpc_fusion is only called every 5
seconds.  If the commands are already completed by firmware, there is an
additional delay of 5 seconds before driver will process completion for
these commands.

Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_fusion.c

index 28c326451c1ee5e784c0dffb03de005ec91fbec6..d33e833ad32c721e54e4ce8aabc5a600acd744b8 100644 (file)
@@ -3558,6 +3558,7 @@ int megasas_wait_for_outstanding_fusion(struct megasas_instance *instance,
                        }
                }
 
+               megasas_complete_cmd_dpc_fusion((unsigned long)instance);
                outstanding = atomic_read(&instance->fw_outstanding);
                if (!outstanding)
                        goto out;
@@ -3566,8 +3567,6 @@ int megasas_wait_for_outstanding_fusion(struct megasas_instance *instance,
                        dev_notice(&instance->pdev->dev, "[%2d]waiting for %d "
                               "commands to complete for scsi%d\n", i,
                               outstanding, instance->host->host_no);
-                       megasas_complete_cmd_dpc_fusion(
-                               (unsigned long)instance);
                }
                msleep(1000);
        }