diff options
Diffstat (limited to 'drivers/target/tcm_fc/tfc_cmd.c')
| -rw-r--r-- | drivers/target/tcm_fc/tfc_cmd.c | 14 | 
1 files changed, 10 insertions, 4 deletions
| diff --git a/drivers/target/tcm_fc/tfc_cmd.c b/drivers/target/tcm_fc/tfc_cmd.c index 768f250680d9..410b723f9d79 100644 --- a/drivers/target/tcm_fc/tfc_cmd.c +++ b/drivers/target/tcm_fc/tfc_cmd.c @@ -543,16 +543,22 @@ static void ft_send_work(struct work_struct *work)  	fc_seq_set_resp(cmd->seq, ft_recv_seq, cmd);  	cmd->se_cmd.tag = fc_seq_exch(cmd->seq)->rxid; +  	/*  	 * Use a single se_cmd->cmd_kref as we expect to release se_cmd  	 * directly from ft_check_stop_free callback in response path.  	 */ -	if (target_submit_cmd(&cmd->se_cmd, cmd->sess->se_sess, fcp->fc_cdb, -			      &cmd->ft_sense_buffer[0], scsilun_to_int(&fcp->fc_lun), -			      ntohl(fcp->fc_dl), task_attr, data_dir, -			      TARGET_SCF_ACK_KREF)) +	if (target_init_cmd(&cmd->se_cmd, cmd->sess->se_sess, +			    &cmd->ft_sense_buffer[0], +			    scsilun_to_int(&fcp->fc_lun), ntohl(fcp->fc_dl), +			    task_attr, data_dir, TARGET_SCF_ACK_KREF))  		goto err; +	if (target_submit_prep(&cmd->se_cmd, fcp->fc_cdb, NULL, 0, NULL, 0, +			       NULL, 0, GFP_KERNEL)) +		return; + +	target_submit(&cmd->se_cmd);  	pr_debug("r_ctl %x target_submit_cmd %p\n", fh->fh_r_ctl, cmd);  	return; | 
