[SCSI] bnx2i: Fixed a protocol violation on nopout responses
Eddie Wai [Thu, 12 Aug 2010 23:44:27 +0000 (16:44 -0700)]
According to RFC3720, nopout packet sent in response to unsolicited
nopin packet requesting a response must retain the TTT of the requester.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>

drivers/scsi/bnx2i/bnx2i.h
drivers/scsi/bnx2i/bnx2i_hwi.c
drivers/scsi/bnx2i/bnx2i_iscsi.c

index 00c0335..b6345d9 100644 (file)
@@ -753,7 +753,7 @@ extern int bnx2i_send_iscsi_tmf(struct bnx2i_conn *conn,
 extern int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *conn,
                                    struct bnx2i_cmd *cmnd);
 extern int bnx2i_send_iscsi_nopout(struct bnx2i_conn *conn,
-                                  struct iscsi_task *mtask, u32 ttt,
+                                  struct iscsi_task *mtask,
                                   char *datap, int data_len, int unsol);
 extern int bnx2i_send_iscsi_logout(struct bnx2i_conn *conn,
                                   struct iscsi_task *mtask);
index d23fc25..015efb5 100644 (file)
@@ -464,7 +464,6 @@ int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *bnx2i_conn,
  * @conn:              iscsi connection
  * @cmd:               driver command structure which is requesting
  *                     a WQE to sent to chip for further processing
- * @ttt:               TTT to be used when building pdu header
  * @datap:             payload buffer pointer
  * @data_len:          payload data length
  * @unsol:             indicated whether nopout pdu is unsolicited pdu or
@@ -473,7 +472,7 @@ int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *bnx2i_conn,
  * prepare and post a nopout request WQE to CNIC firmware
  */
 int bnx2i_send_iscsi_nopout(struct bnx2i_conn *bnx2i_conn,
-                           struct iscsi_task *task, u32 ttt,
+                           struct iscsi_task *task,
                            char *datap, int data_len, int unsol)
 {
        struct bnx2i_endpoint *ep = bnx2i_conn->ep;
@@ -498,7 +497,7 @@ int bnx2i_send_iscsi_nopout(struct bnx2i_conn *bnx2i_conn,
        nopout_wqe->itt = ((u16)task->itt |
                           (ISCSI_TASK_TYPE_MPATH <<
                            ISCSI_TMF_REQUEST_TYPE_SHIFT));
-       nopout_wqe->ttt = ttt;
+       nopout_wqe->ttt = nopout_hdr->ttt;
        nopout_wqe->flags = 0;
        if (!unsol)
                nopout_wqe->flags = ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION;
index a46ccc3..36b245b 100644 (file)
@@ -1078,11 +1078,9 @@ static int bnx2i_iscsi_send_generic_request(struct iscsi_task *task)
                buf = bnx2i_conn->gen_pdu.req_buf;
                if (data_len)
                        rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task,
-                                                    RESERVED_ITT,
                                                     buf, data_len, 1);
                else
                        rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task,
-                                                    RESERVED_ITT,
                                                     NULL, 0, 1);
                break;
        case ISCSI_OP_LOGOUT: