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))
+               return;
+
+       target_submit(&cmd->se_cmd);
        pr_debug("r_ctl %x target_submit_cmd %p\n", fh->fh_r_ctl, cmd);
        return;