struct tcm_loop_tpg *tl_tpg;
        struct scatterlist *sgl_bidi = NULL;
        u32 sgl_bidi_count = 0, transfer_length;
-       int rc;
 
        tl_hba = *(struct tcm_loop_hba **)shost_priv(sc->device->host);
        tl_tpg = &tl_hba->tl_hba_tpgs[sc->device->id];
        }
 
        se_cmd->tag = tl_cmd->sc_cmd_tag;
-       rc = target_submit_cmd_map_sgls(se_cmd, tl_nexus->se_sess, sc->cmnd,
-                       &tl_cmd->tl_sense_buf[0], tl_cmd->sc->device->lun,
-                       transfer_length, TCM_SIMPLE_TAG,
-                       sc->sc_data_direction, 0,
-                       scsi_sglist(sc), scsi_sg_count(sc),
-                       sgl_bidi, sgl_bidi_count,
-                       scsi_prot_sglist(sc), scsi_prot_sg_count(sc));
-       if (rc < 0) {
-               set_host_byte(sc, DID_NO_CONNECT);
-               goto out_done;
-       }
+       target_init_cmd(se_cmd, tl_nexus->se_sess, &tl_cmd->tl_sense_buf[0],
+                       tl_cmd->sc->device->lun, transfer_length,
+                       TCM_SIMPLE_TAG, sc->sc_data_direction, 0);
+
+       if (target_submit_prep(se_cmd, sc->cmnd, scsi_sglist(sc),
+                              scsi_sg_count(sc), sgl_bidi, sgl_bidi_count,
+                              scsi_prot_sglist(sc), scsi_prot_sg_count(sc)))
+               return;
+
+       target_submit(se_cmd);
        return;
 
 out_done: