[SCSI] bnx2i: Fixed a protocol violation on nopout responses

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>
This commit is contained in:
Eddie Wai 2010-08-12 16:44:27 -07:00 committed by James Bottomley
parent a87b04de66
commit 39304072ac
3 changed files with 3 additions and 6 deletions

View 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, extern int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *conn,
struct bnx2i_cmd *cmnd); struct bnx2i_cmd *cmnd);
extern int bnx2i_send_iscsi_nopout(struct bnx2i_conn *conn, 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); char *datap, int data_len, int unsol);
extern int bnx2i_send_iscsi_logout(struct bnx2i_conn *conn, extern int bnx2i_send_iscsi_logout(struct bnx2i_conn *conn,
struct iscsi_task *mtask); struct iscsi_task *mtask);

View File

@ -464,7 +464,6 @@ int bnx2i_send_iscsi_scsicmd(struct bnx2i_conn *bnx2i_conn,
* @conn: iscsi connection * @conn: iscsi connection
* @cmd: driver command structure which is requesting * @cmd: driver command structure which is requesting
* a WQE to sent to chip for further processing * a WQE to sent to chip for further processing
* @ttt: TTT to be used when building pdu header
* @datap: payload buffer pointer * @datap: payload buffer pointer
* @data_len: payload data length * @data_len: payload data length
* @unsol: indicated whether nopout pdu is unsolicited pdu or * @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 * prepare and post a nopout request WQE to CNIC firmware
*/ */
int bnx2i_send_iscsi_nopout(struct bnx2i_conn *bnx2i_conn, 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) char *datap, int data_len, int unsol)
{ {
struct bnx2i_endpoint *ep = bnx2i_conn->ep; 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 | nopout_wqe->itt = ((u16)task->itt |
(ISCSI_TASK_TYPE_MPATH << (ISCSI_TASK_TYPE_MPATH <<
ISCSI_TMF_REQUEST_TYPE_SHIFT)); ISCSI_TMF_REQUEST_TYPE_SHIFT));
nopout_wqe->ttt = ttt; nopout_wqe->ttt = nopout_hdr->ttt;
nopout_wqe->flags = 0; nopout_wqe->flags = 0;
if (!unsol) if (!unsol)
nopout_wqe->flags = ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION; nopout_wqe->flags = ISCSI_NOP_OUT_REQUEST_LOCAL_COMPLETION;

View File

@ -1078,11 +1078,9 @@ static int bnx2i_iscsi_send_generic_request(struct iscsi_task *task)
buf = bnx2i_conn->gen_pdu.req_buf; buf = bnx2i_conn->gen_pdu.req_buf;
if (data_len) if (data_len)
rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task, rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task,
RESERVED_ITT,
buf, data_len, 1); buf, data_len, 1);
else else
rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task, rc = bnx2i_send_iscsi_nopout(bnx2i_conn, task,
RESERVED_ITT,
NULL, 0, 1); NULL, 0, 1);
break; break;
case ISCSI_OP_LOGOUT: case ISCSI_OP_LOGOUT: