IB/srpt: Fix srpt_handle_cmd() error paths
The target core function that should be called if target_submit_cmd() fails is target_put_sess_cmd(). Additionally, change the return type of srpt_handle_cmd() from int into void. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Estrin <alex.estrin@intel.com> Cc: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
f108f0f66a
commit
2c7f37ff1c
|
@ -91,6 +91,7 @@ MODULE_PARM_DESC(srpt_service_guid,
|
|||
" instead of using the node_guid of the first HCA.");
|
||||
|
||||
static struct ib_client srpt_client;
|
||||
static void srpt_release_cmd(struct se_cmd *se_cmd);
|
||||
static void srpt_release_channel(struct srpt_rdma_ch *ch);
|
||||
static int srpt_queue_status(struct se_cmd *cmd);
|
||||
static void srpt_recv_done(struct ib_cq *cq, struct ib_wc *wc);
|
||||
|
@ -1492,7 +1493,7 @@ static int srpt_check_stop_free(struct se_cmd *cmd)
|
|||
/**
|
||||
* srpt_handle_cmd() - Process SRP_CMD.
|
||||
*/
|
||||
static int srpt_handle_cmd(struct srpt_rdma_ch *ch,
|
||||
static void srpt_handle_cmd(struct srpt_rdma_ch *ch,
|
||||
struct srpt_recv_ioctx *recv_ioctx,
|
||||
struct srpt_send_ioctx *send_ioctx)
|
||||
{
|
||||
|
@ -1500,7 +1501,6 @@ static int srpt_handle_cmd(struct srpt_rdma_ch *ch,
|
|||
struct srp_cmd *srp_cmd;
|
||||
u64 data_len;
|
||||
enum dma_data_direction dir;
|
||||
sense_reason_t ret;
|
||||
int rc;
|
||||
|
||||
BUG_ON(!send_ioctx);
|
||||
|
@ -1528,8 +1528,7 @@ static int srpt_handle_cmd(struct srpt_rdma_ch *ch,
|
|||
if (srpt_get_desc_tbl(send_ioctx, srp_cmd, &dir, &data_len)) {
|
||||
pr_err("0x%llx: parsing SRP descriptor table failed.\n",
|
||||
srp_cmd->tag);
|
||||
ret = TCM_INVALID_CDB_FIELD;
|
||||
goto send_sense;
|
||||
goto release_ioctx;
|
||||
}
|
||||
|
||||
rc = target_submit_cmd(cmd, ch->sess, srp_cmd->cdb,
|
||||
|
@ -1537,14 +1536,15 @@ static int srpt_handle_cmd(struct srpt_rdma_ch *ch,
|
|||
scsilun_to_int(&srp_cmd->lun), data_len,
|
||||
TCM_SIMPLE_TAG, dir, TARGET_SCF_ACK_KREF);
|
||||
if (rc != 0) {
|
||||
ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
goto send_sense;
|
||||
pr_debug("target_submit_cmd() returned %d for tag %#llx\n", rc,
|
||||
srp_cmd->tag);
|
||||
goto release_ioctx;
|
||||
}
|
||||
return 0;
|
||||
return;
|
||||
|
||||
send_sense:
|
||||
transport_send_check_condition_and_sense(cmd, ret, 0);
|
||||
return -1;
|
||||
release_ioctx:
|
||||
send_ioctx->state = SRPT_STATE_DONE;
|
||||
srpt_release_cmd(cmd);
|
||||
}
|
||||
|
||||
static int srp_tmr_to_tcm(int fn)
|
||||
|
|
Loading…
Reference in New Issue