Statistics counters which are added is
 - NOP IN/OUT counters
 - Login PDU counters
 - Text PDU counters
 - Logout PDU counters
 - ASYNC_PDU counters
 - Reject PDU counters
 - Digest Error counters

Signed-off-by: John Soni Jose <[email protected]>
Signed-off-by: Jayamohan Kallickal <[email protected]>
---
 drivers/scsi/be2iscsi/be_iscsi.c |   12 ++++++++++--
 drivers/scsi/be2iscsi/be_main.c  |   30 +++++++++++++++++++++++++++++-
 drivers/scsi/be2iscsi/be_main.h  |   19 +++++++++++++++++++
 3 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/be2iscsi/be_iscsi.c b/drivers/scsi/be2iscsi/be_iscsi.c
index 2843a67..9ba2a64 100644
--- a/drivers/scsi/be2iscsi/be_iscsi.c
+++ b/drivers/scsi/be2iscsi/be_iscsi.c
@@ -899,6 +899,7 @@ void beiscsi_conn_get_stats(struct iscsi_cls_conn *cls_conn,
                            struct iscsi_stats *stats)
 {
        struct iscsi_conn *conn = cls_conn->dd_data;
+       struct beiscsi_conn *beiscsi_conn = conn->dd_data;
        struct beiscsi_hba *phba = NULL;
 
        phba = ((struct beiscsi_conn *)conn->dd_data)->phba;
@@ -914,8 +915,15 @@ void beiscsi_conn_get_stats(struct iscsi_cls_conn 
*cls_conn,
        stats->tmfrsp_pdus = conn->tmfrsp_pdus_cnt;
        stats->tmfcmd_pdus = conn->tmfcmd_pdus_cnt;
        stats->r2t_pdus = conn->r2t_pdus_cnt;
-       stats->digest_err = 0;
-       stats->timeout_err = 0;
+       stats->noptx_pdus = beiscsi_conn->noptx_pdus;
+       stats->noprx_pdus = beiscsi_conn->noprx_pdus;
+       stats->login_pdus = beiscsi_conn->login_pdus;
+       stats->text_pdus = beiscsi_conn->text_pdus;
+       stats->textrsp_pdus = beiscsi_conn->textrsp_pdus;
+       stats->logout_pdus = beiscsi_conn->logoutrsp_pdus;
+       stats->async_pdus = beiscsi_conn->async_pdus;
+       stats->rjt_pdus = beiscsi_conn->rjt_pdus;
+       stats->digest_err = beiscsi_conn->digest_err;
        stats->custom_length = 0;
        strcpy(stats->custom[0].desc, "eh_abort_cnt");
        stats->custom[0].value = conn->eh_abort_cnt;
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index 89bf558..a045f06 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -1180,8 +1180,10 @@ beiscsi_process_async_pdu(struct beiscsi_conn 
*beiscsi_conn,
        case ISCSI_OP_NOOP_IN:
                pbuffer = NULL;
                buf_len = 0;
+               beiscsi_conn->noprx_pdus++;
                break;
        case ISCSI_OP_ASYNC_EVENT:
+               beiscsi_conn->async_pdus++;
                break;
        case ISCSI_OP_REJECT:
                WARN_ON(!pbuffer);
@@ -1189,6 +1191,7 @@ beiscsi_process_async_pdu(struct beiscsi_conn 
*beiscsi_conn,
                beiscsi_log(phba, KERN_ERR,
                            BEISCSI_LOG_CONFIG | BEISCSI_LOG_IO,
                            "BM_%d : In ISCSI_OP_REJECT\n");
+               beiscsi_conn->rjt_pdus++;
                break;
        case ISCSI_OP_LOGIN_RSP:
        case ISCSI_OP_TEXT_RSP:
@@ -1196,6 +1199,9 @@ beiscsi_process_async_pdu(struct beiscsi_conn 
*beiscsi_conn,
                io_task = task->dd_data;
                login_hdr = (struct iscsi_hdr *)ppdu;
                login_hdr->itt = io_task->libiscsi_itt;
+
+               if (login_hdr->opcode == ISCSI_OP_TEXT_RSP)
+                       beiscsi_conn->textrsp_pdus++;
                break;
        default:
                beiscsi_log(phba, KERN_WARNING,
@@ -1404,6 +1410,8 @@ be_complete_io(struct beiscsi_conn *beiscsi_conn,
 
                return;
        }
+
+       conn->scsirsp_pdus_cnt++;
        task->sc->result = (DID_OK << 16) | status;
        if (rsp != ISCSI_STATUS_CMD_COMPLETED) {
                task->sc->result = DID_ERROR << 16;
@@ -1464,6 +1472,8 @@ be_complete_logout(struct beiscsi_conn *beiscsi_conn,
        hdr->dlength[2] = 0;
        hdr->hlength = 0;
        hdr->itt = io_task->libiscsi_itt;
+
+       beiscsi_conn->logoutrsp_pdus++;
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0);
 }
 
@@ -1485,6 +1495,8 @@ be_complete_tmf(struct beiscsi_conn *beiscsi_conn,
                                     csol_cqe->cmd_wnd - 1);
 
        hdr->itt = io_task->libiscsi_itt;
+
+       conn->tmfrsp_pdus_cnt++;
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0);
 }
 
@@ -1539,6 +1551,8 @@ be_complete_nopin_resp(struct beiscsi_conn *beiscsi_conn,
 
        hdr->opcode = ISCSI_OP_NOOP_IN;
        hdr->itt = io_task->libiscsi_itt;
+
+       beiscsi_conn->noprx_pdus++;
        __iscsi_complete_pdu(conn, (struct iscsi_hdr *)hdr, NULL, 0);
 }
 
@@ -2240,7 +2254,14 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                                    "BM_%d : Ignoring %s[%d] on CID : %d\n",
                                    cqe_desc[code], code, cid);
                        break;
+               case CXN_KILLED_HDR_DIGEST_ERR:
                case SOL_CMD_KILLED_DATA_DIGEST_ERR:
+                       beiscsi_conn->digest_err++;
+                       beiscsi_log(phba, KERN_ERR,
+                                   BEISCSI_LOG_CONFIG | BEISCSI_LOG_IO,
+                                   "BM_%d : Cmd Notification %s[%d] on CID : 
%d\n",
+                                   cqe_desc[code], code,  cid);
+                       break;
                case CMD_KILLED_INVALID_STATSN_RCVD:
                case CMD_KILLED_INVALID_R2T_RCVD:
                case CMD_CXN_KILLED_LUN_INVALID:
@@ -2254,6 +2275,7 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                                    cqe_desc[code], code,  cid);
                        break;
                case UNSOL_DATA_DIGEST_ERROR_NOTIFY:
+                       beiscsi_conn->digest_err++;
                        beiscsi_log(phba, KERN_ERR,
                                    BEISCSI_LOG_IO | BEISCSI_LOG_CONFIG,
                                    "BM_%d :  Dropping %s[%d] on DPDU ring on 
CID : %d\n",
@@ -2266,7 +2288,6 @@ static unsigned int beiscsi_process_cq(struct be_eq_obj 
*pbe_eq)
                case CXN_KILLED_PDU_SIZE_EXCEEDS_DSL:
                case CXN_KILLED_BURST_LEN_MISMATCH:
                case CXN_KILLED_AHS_RCVD:
-               case CXN_KILLED_HDR_DIGEST_ERR:
                case CXN_KILLED_UNKNOWN_HDR:
                case CXN_KILLED_STALE_ITT_TTT_RCVD:
                case CXN_KILLED_INVALID_ITT_TTT_RCVD:
@@ -4923,6 +4944,7 @@ int beiscsi_iotask_v2(struct iscsi_task *task, struct 
scatterlist *sg,
                AMAP_SET_BITS(struct amap_iscsi_wrb_v2, type, pwrb,
                              INI_WR_CMD);
                AMAP_SET_BITS(struct amap_iscsi_wrb_v2, dsp, pwrb, 1);
+               conn->txdata_octets += (xferlen + sg_dma_len(sg));
        } else {
                AMAP_SET_BITS(struct amap_iscsi_wrb_v2, type, pwrb,
                              INI_RD_CMD);
@@ -4987,6 +5009,7 @@ static int beiscsi_iotask(struct iscsi_task *task, struct 
scatterlist *sg,
                AMAP_SET_BITS(struct amap_iscsi_wrb, type, pwrb,
                              INI_WR_CMD);
                AMAP_SET_BITS(struct amap_iscsi_wrb, dsp, pwrb, 1);
+               conn->txdata_octets += (xferlen + sg_dma_len(sg));
        } else {
                AMAP_SET_BITS(struct amap_iscsi_wrb, type, pwrb,
                              INI_RD_CMD);
@@ -5090,6 +5113,7 @@ static int beiscsi_mtask(struct iscsi_task *task)
        case ISCSI_OP_LOGIN:
                AMAP_SET_BITS(struct amap_iscsi_wrb, cmdsn_itt, pwrb, 1);
                ADAPTER_SET_WRB_TYPE(pwrb, TGT_DM_CMD, pwrb_typeoffset);
+               beiscsi_conn->login_pdus++;
                hwi_write_buffer(pwrb, task);
                break;
        case ISCSI_OP_NOOP_OUT:
@@ -5110,18 +5134,22 @@ static int beiscsi_mtask(struct iscsi_task *task)
                                AMAP_SET_BITS(struct amap_iscsi_wrb_v2,
                                              dmsg, pwrb, 0);
                }
+               beiscsi_conn->noptx_pdus++;
                hwi_write_buffer(pwrb, task);
                break;
        case ISCSI_OP_TEXT:
                ADAPTER_SET_WRB_TYPE(pwrb, TGT_DM_CMD, pwrb_typeoffset);
+               beiscsi_conn->text_pdus++;
                hwi_write_buffer(pwrb, task);
                break;
        case ISCSI_OP_SCSI_TMFUNC:
                ADAPTER_SET_WRB_TYPE(pwrb, INI_TMF_CMD, pwrb_typeoffset);
+               conn->tmfcmd_pdus_cnt++;
                hwi_write_buffer(pwrb, task);
                break;
        case ISCSI_OP_LOGOUT:
                ADAPTER_SET_WRB_TYPE(pwrb, HWH_TYPE_LOGOUT, pwrb_typeoffset);
+               beiscsi_conn->logout_pdus++;
                hwi_write_buffer(pwrb, task);
                break;
 
diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
index 0076119..d21ad9e 100644
--- a/drivers/scsi/be2iscsi/be_main.h
+++ b/drivers/scsi/be2iscsi/be_main.h
@@ -449,6 +449,25 @@ struct beiscsi_conn {
        struct sgl_handle *plogin_sgl_handle;
        struct beiscsi_session *beiscsi_sess;
        struct iscsi_task *task;
+
+       /* CXN statistics */
+       /* Xmit Counters */
+       uint32_t noptx_pdus;
+       uint32_t login_pdus;
+       uint32_t text_pdus;
+       uint32_t logout_pdus;
+       uint32_t snack_pdus;
+
+       /* Rx Counters */
+       uint32_t noprx_pdus;
+       uint32_t textrsp_pdus;
+       uint32_t logoutrsp_pdus;
+       uint32_t async_pdus;
+       uint32_t rjt_pdus;
+
+       /* Error Counters */
+       uint32_t digest_err;
+       uint32_t format_err;
 };
 
 /* This structure is used by the chip */
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to