Commit c807f643 authored by Jack Wang's avatar Jack Wang Committed by Nicholas Bellinger

ib_srpt: always set response for task management

The SRP specification requires:

  "Response data shall be provided in any SRP_RSP response that is sent in
   response to an SRP_TSK_MGMT request (see 6.7). The information in the
   RSP_CODE field (see table 24) shall indicate the completion status of
   the task management function."

So fix this to avoid the SRP initiator interprets task management functions
that succeeded as failed.
Signed-off-by: default avatarJack Wang <jinpu.wang@profitbricks.com>
Cc: stable@vger.kernel.org # 3.3+
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 8c7f6e9b
...@@ -1588,7 +1588,7 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch, ...@@ -1588,7 +1588,7 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch,
int resp_data_len; int resp_data_len;
int resp_len; int resp_len;
resp_data_len = (rsp_code == SRP_TSK_MGMT_SUCCESS) ? 0 : 4; resp_data_len = 4;
resp_len = sizeof(*srp_rsp) + resp_data_len; resp_len = sizeof(*srp_rsp) + resp_data_len;
srp_rsp = ioctx->ioctx.buf; srp_rsp = ioctx->ioctx.buf;
...@@ -1600,11 +1600,9 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch, ...@@ -1600,11 +1600,9 @@ static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch,
+ atomic_xchg(&ch->req_lim_delta, 0)); + atomic_xchg(&ch->req_lim_delta, 0));
srp_rsp->tag = tag; srp_rsp->tag = tag;
if (rsp_code != SRP_TSK_MGMT_SUCCESS) { srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;
srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID; srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);
srp_rsp->resp_data_len = cpu_to_be32(resp_data_len); srp_rsp->data[3] = rsp_code;
srp_rsp->data[3] = rsp_code;
}
return resp_len; return resp_len;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment