scsi: lpfc: Correct bandwidth logging during receipt of congestion sync WCQE
authorJustin Tee <justin.tee@broadcom.com>
Wed, 16 Nov 2022 01:19:17 +0000 (17:19 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 17 Nov 2022 18:18:42 +0000 (18:18 +0000)
The lpfc_cmf_timer adjusts phba->cmf_link_byte_count periodically and can
artifically inflate bandwidth percent.

During bandwidth calculation, correct for this by setting a cap of logging
a maximum of 100%.

Bandwidth calculation is only used for display under LOG_CGN_MGMT so there
is no expectation of impacts on performance.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20221116011921.105995-3-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_sli.c

index 35c9404..182aaae 100644 (file)
@@ -1846,6 +1846,12 @@ lpfc_cmf_sync_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
                                  phba->cmf_link_byte_count);
                bwpcent = div64_u64(bw * 100 + slop,
                                    phba->cmf_link_byte_count);
+               /* Because of bytes adjustment due to shorter timer in
+                * lpfc_cmf_timer() the cmf_link_byte_count can be shorter and
+                * may seem like BW is above 100%.
+                */
+               if (bwpcent > 100)
+                       bwpcent = 100;
 
                if (phba->cmf_max_bytes_per_interval < bw &&
                    bwpcent > 95)