struct se_portal_group *se_tpg;
        struct tcm_qla2xxx_tpg *tpg;
 #endif
-       int target_flags = TARGET_SCF_ACK_KREF;
+       int rc, target_flags = TARGET_SCF_ACK_KREF;
        unsigned long flags;
 
        if (bidi)
        list_add_tail(&cmd->sess_cmd_list, &sess->sess_cmd_list);
        spin_unlock_irqrestore(&sess->sess_cmd_lock, flags);
 
-       return target_submit_cmd(se_cmd, se_sess, cdb, &cmd->sense_buffer[0],
-                                cmd->unpacked_lun, data_length, fcp_task_attr,
-                                data_dir, target_flags);
+       rc = target_init_cmd(se_cmd, se_sess, &cmd->sense_buffer[0],
+                            cmd->unpacked_lun, data_length, fcp_task_attr,
+                            data_dir, target_flags);
+       if (rc)
+               return rc;
+
+       if (target_submit_prep(se_cmd, cdb, NULL, 0, NULL, 0, NULL, 0))
+               return 0;
+
+       target_submit(se_cmd);
+       return 0;
 }
 
 static void tcm_qla2xxx_handle_data_work(struct work_struct *work)