| From c807f64340932e19f0d2ac9b30c8381e1f60663a Mon Sep 17 00:00:00 2001 |
| From: Jack Wang <jinpu.wang@profitbricks.com> |
| Date: Mon, 30 Sep 2013 10:09:05 +0200 |
| Subject: ib_srpt: always set response for task management |
| |
| From: Jack Wang <jinpu.wang@profitbricks.com> |
| |
| commit c807f64340932e19f0d2ac9b30c8381e1f60663a upstream. |
| |
| 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: Jack Wang <jinpu.wang@profitbricks.com> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/infiniband/ulp/srpt/ib_srpt.c | 10 ++++------ |
| 1 file changed, 4 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/infiniband/ulp/srpt/ib_srpt.c |
| +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c |
| @@ -1588,7 +1588,7 @@ static int srpt_build_tskmgmt_rsp(struct |
| int resp_data_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; |
| |
| srp_rsp = ioctx->ioctx.buf; |
| @@ -1600,11 +1600,9 @@ static int srpt_build_tskmgmt_rsp(struct |
| + atomic_xchg(&ch->req_lim_delta, 0)); |
| srp_rsp->tag = tag; |
| |
| - if (rsp_code != SRP_TSK_MGMT_SUCCESS) { |
| - srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID; |
| - srp_rsp->resp_data_len = cpu_to_be32(resp_data_len); |
| - srp_rsp->data[3] = rsp_code; |
| - } |
| + srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID; |
| + srp_rsp->resp_data_len = cpu_to_be32(resp_data_len); |
| + srp_rsp->data[3] = rsp_code; |
| |
| return resp_len; |
| } |