return PYX_TRANSPORT_SENT_TO_TRANSPORT;
 }
+
+/*
+ * Write a CDB into @cdb that is based on the one the intiator sent us,
+ * but updated to only cover the sectors that the current task handles.
+ */
+void target_get_task_cdb(struct se_task *task, unsigned char *cdb)
+{
+       struct se_cmd *cmd = task->task_se_cmd;
+
+       memcpy(cdb, cmd->t_task_cdb, scsi_command_size(cmd->t_task_cdb));
+       if (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) {
+               cmd->transport_split_cdb(task->task_lba, task->task_sectors,
+                                        cdb);
+       }
+}
+EXPORT_SYMBOL(target_get_task_cdb);
 
        struct bio *hbio;
        int ret;
 
+       target_get_task_cdb(task, pt->pscsi_cdb);
+
        if (task->task_se_cmd->se_cmd_flags & SCF_SCSI_NON_DATA_CDB) {
                req = blk_get_request(pdv->pdv_sd->request_queue,
                                (task->task_data_direction == DMA_TO_DEVICE),
        return PYX_TRANSPORT_OUT_OF_MEMORY_RESOURCES;
 }
 
-
-/*     pscsi_get_cdb():
- *
- *
- */
-static unsigned char *pscsi_get_cdb(struct se_task *task)
-{
-       struct pscsi_plugin_task *pt = PSCSI_TASK(task);
-
-       return pt->pscsi_cdb;
-}
-
 /*     pscsi_get_sense_buffer():
  *
  *
        .check_configfs_dev_params = pscsi_check_configfs_dev_params,
        .set_configfs_dev_params = pscsi_set_configfs_dev_params,
        .show_configfs_dev_params = pscsi_show_configfs_dev_params,
-       .get_cdb                = pscsi_get_cdb,
        .get_sense_buffer       = pscsi_get_sense_buffer,
        .get_device_rev         = pscsi_get_device_rev,
        .get_device_type        = pscsi_get_device_type,
 
                task->task_sectors = min(sectors, dev_max_sectors);
                task->task_size = task->task_sectors * sector_size;
 
-               if (dev->transport->get_cdb) {
-                       unsigned char *cdb = dev->transport->get_cdb(task);
-
-                       memcpy(cdb, cmd->t_task_cdb,
-                              scsi_command_size(cmd->t_task_cdb));
-
-                       /* Update new cdb with updated lba/sectors */
-                       cmd->transport_split_cdb(task->task_lba,
-                                                task->task_sectors, cdb);
-               }
-
                /*
                 * This now assumes that passed sg_ents are in PAGE_SIZE chunks
                 * in order to calculate the number per task SGL entries
 static int
 transport_allocate_control_task(struct se_cmd *cmd)
 {
-       struct se_device *dev = cmd->se_dev;
        struct se_task *task;
        unsigned long flags;
 
        if (!task)
                return -ENOMEM;
 
-       if (dev->transport->get_cdb) {
-               unsigned char *cdb = dev->transport->get_cdb(task);
-
-               memcpy(cdb, cmd->t_task_cdb, scsi_command_size(cmd->t_task_cdb));
-       }
-
        task->task_sg = kmalloc(sizeof(struct scatterlist) * cmd->t_data_nents,
                                GFP_KERNEL);
        if (!task->task_sg) {
 
 extern int core_alua_check_nonop_delay(struct se_cmd *);
 /* From target_core_cdb.c */
 extern int transport_emulate_control_cdb(struct se_task *);
+extern void target_get_task_cdb(struct se_task *task, unsigned char *cdb);
 
 /*
  * Each se_transport_task_t can have N number of possible struct se_task's
         */
        ssize_t (*show_configfs_dev_params)(struct se_hba *, struct se_subsystem_dev *,
                                                char *);
-       /*
-        * get_cdb():
-        */
-       unsigned char *(*get_cdb)(struct se_task *);
        /*
         * get_device_rev():
         */