From: Satish Kharat <satis...@cisco.com>

[ Upstream commit 7ef539c88d7d394410d547c9f082d477093a2a22 ]

Fixing the IO stats update (Active IOs and IO completion) to prevent
"Number of Active IOs" from becoming negative in the fnistats output.

Signed-off-by: Satish Kharat <satis...@cisco.com>
Signed-off-by: Sesidhar Baddela <sebad...@cisco.com>
Signed-off-by: Martin K. Petersen <martin.peter...@oracle.com>
Signed-off-by: Sasha Levin <alexander.le...@microsoft.com>
---
 drivers/scsi/fnic/fnic_scsi.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index 44dd372aa7d3..c056b8111ad2 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -1127,12 +1127,6 @@ static void fnic_fcpio_itmf_cmpl_handler(struct fnic 
*fnic,
                else
                        CMD_ABTS_STATUS(sc) = hdr_status;
 
-               atomic64_dec(&fnic_stats->io_stats.active_ios);
-               if (atomic64_read(&fnic->io_cmpl_skip))
-                       atomic64_dec(&fnic->io_cmpl_skip);
-               else
-                       atomic64_inc(&fnic_stats->io_stats.io_completions);
-
                if (!(CMD_FLAGS(sc) & (FNIC_IO_ABORTED | FNIC_IO_DONE)))
                        atomic64_inc(&misc_stats->no_icmnd_itmf_cmpls);
 
@@ -1173,6 +1167,11 @@ static void fnic_fcpio_itmf_cmpl_handler(struct fnic 
*fnic,
                                        (((u64)CMD_FLAGS(sc) << 32) |
                                        CMD_STATE(sc)));
                                sc->scsi_done(sc);
+                               atomic64_dec(&fnic_stats->io_stats.active_ios);
+                               if (atomic64_read(&fnic->io_cmpl_skip))
+                                       atomic64_dec(&fnic->io_cmpl_skip);
+                               else
+                                       
atomic64_inc(&fnic_stats->io_stats.io_completions);
                        }
                }
 
@@ -1962,6 +1961,11 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
        /* Call SCSI completion function to complete the IO */
                sc->result = (DID_ABORT << 16);
                sc->scsi_done(sc);
+               atomic64_dec(&fnic_stats->io_stats.active_ios);
+               if (atomic64_read(&fnic->io_cmpl_skip))
+                       atomic64_dec(&fnic->io_cmpl_skip);
+               else
+                       atomic64_inc(&fnic_stats->io_stats.io_completions);
        }
 
 fnic_abort_cmd_end:
-- 
2.14.1

Reply via email to