scsi: fnic: Fix for "Number of Active IOs" in fnicstats becoming negative
authorSatish Kharat <satishkh@cisco.com>
Wed, 1 Mar 2017 00:14:56 +0000 (16:14 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 23 Mar 2017 13:57:23 +0000 (09:57 -0400)
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 <satishkh@cisco.com>
Signed-off-by: Sesidhar Baddela <sebaddel@cisco.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/fnic/fnic_scsi.c

index 5e694a5..0650911 100644 (file)
@@ -1134,12 +1134,6 @@ static void fnic_fcpio_itmf_cmpl_handler(struct fnic *fnic,
                if (hdr_status == FCPIO_IO_NOT_FOUND)
                        CMD_ABTS_STATUS(sc) = FCPIO_SUCCESS;
 
-               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);
 
@@ -1180,6 +1174,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);
                        }
                }
 
@@ -1969,6 +1968,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: