scsi: lpfc: Fix I/O block after enabling managed congestion mode
authorJames Smart <jsmart2021@gmail.com>
Fri, 10 Sep 2021 23:31:56 +0000 (16:31 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 15 Sep 2021 03:33:21 +0000 (23:33 -0400)
If the congestion management framework dynamically enables, it may do so
while I/O is in flight. The updates of cmf info due to inflight I/O
completing may happen before values have been initialized.

Fix by ensure cmf_max_bytes_per_interval is initialized when checking
bandwidth utilization for SCSI layer blocking.

Link: https://lore.kernel.org/r/20210910233159.115896-12-jsmart2021@gmail.com
Co-developed-by: Justin Tee <justin.tee@broadcom.com>
Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_scsi.c

index b70f71b..a2cd227 100644 (file)
@@ -3961,7 +3961,8 @@ lpfc_update_cmf_cmd(struct lpfc_hba *phba, uint32_t size)
        int cpu;
 
        /* At this point we are either LPFC_CFG_MANAGED or LPFC_CFG_MONITOR */
-       if (phba->cmf_active_mode == LPFC_CFG_MANAGED) {
+       if (phba->cmf_active_mode == LPFC_CFG_MANAGED &&
+           phba->cmf_max_bytes_per_interval) {
                total = 0;
                for_each_present_cpu(cpu) {
                        cgs = per_cpu_ptr(phba->cmf_stat, cpu);