aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/target/target_core_cdb.c49
-rw-r--r--drivers/target/target_core_pscsi.c3
-rw-r--r--include/target/target_core_backend.h2
3 files changed, 2 insertions, 52 deletions
diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c
index f6f6059f7f7..8e6b91d0380 100644
--- a/drivers/target/target_core_cdb.c
+++ b/drivers/target/target_core_cdb.c
@@ -1148,52 +1148,3 @@ int target_emulate_noop(struct se_task *task)
1148 transport_complete_task(task, 1); 1148 transport_complete_task(task, 1);
1149 return 0; 1149 return 0;
1150} 1150}
1151
1152/*
1153 * Write a CDB into @cdb that is based on the one the intiator sent us,
1154 * but updated to only cover the sectors that the current task handles.
1155 */
1156void target_get_task_cdb(struct se_task *task, unsigned char *cdb)
1157{
1158 struct se_cmd *cmd = task->task_se_cmd;
1159 unsigned int cdb_len = scsi_command_size(cmd->t_task_cdb);
1160
1161 memcpy(cdb, cmd->t_task_cdb, cdb_len);
1162 if (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB) {
1163 unsigned long long lba = task->task_lba;
1164 u32 sectors = task->task_sectors;
1165
1166 switch (cdb_len) {
1167 case 6:
1168 /* 21-bit LBA and 8-bit sectors */
1169 cdb[1] = (lba >> 16) & 0x1f;
1170 cdb[2] = (lba >> 8) & 0xff;
1171 cdb[3] = lba & 0xff;
1172 cdb[4] = sectors & 0xff;
1173 break;
1174 case 10:
1175 /* 32-bit LBA and 16-bit sectors */
1176 put_unaligned_be32(lba, &cdb[2]);
1177 put_unaligned_be16(sectors, &cdb[7]);
1178 break;
1179 case 12:
1180 /* 32-bit LBA and 32-bit sectors */
1181 put_unaligned_be32(lba, &cdb[2]);
1182 put_unaligned_be32(sectors, &cdb[6]);
1183 break;
1184 case 16:
1185 /* 64-bit LBA and 32-bit sectors */
1186 put_unaligned_be64(lba, &cdb[2]);
1187 put_unaligned_be32(sectors, &cdb[10]);
1188 break;
1189 case 32:
1190 /* 64-bit LBA and 32-bit sectors, extended CDB */
1191 put_unaligned_be64(lba, &cdb[12]);
1192 put_unaligned_be32(sectors, &cdb[28]);
1193 break;
1194 default:
1195 BUG();
1196 }
1197 }
1198}
1199EXPORT_SYMBOL(target_get_task_cdb);
diff --git a/drivers/target/target_core_pscsi.c b/drivers/target/target_core_pscsi.c
index 94c905fcbce..94c7a464963 100644
--- a/drivers/target/target_core_pscsi.c
+++ b/drivers/target/target_core_pscsi.c
@@ -1070,7 +1070,8 @@ static int pscsi_do_task(struct se_task *task)
1070 struct bio *hbio; 1070 struct bio *hbio;
1071 int ret; 1071 int ret;
1072 1072
1073 target_get_task_cdb(task, pt->pscsi_cdb); 1073 memcpy(pt->pscsi_cdb, cmd->t_task_cdb,
1074 scsi_command_size(cmd->t_task_cdb));
1074 1075
1075 if (task->task_se_cmd->se_cmd_flags & SCF_SCSI_NON_DATA_CDB) { 1076 if (task->task_se_cmd->se_cmd_flags & SCF_SCSI_NON_DATA_CDB) {
1076 req = blk_get_request(pdv->pdv_sd->request_queue, 1077 req = blk_get_request(pdv->pdv_sd->request_queue,
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 8c9ff1b1439..55da17b48d9 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -51,8 +51,6 @@ struct se_device *transport_add_device_to_core_hba(struct se_hba *,
51void transport_complete_sync_cache(struct se_cmd *, int); 51void transport_complete_sync_cache(struct se_cmd *, int);
52void transport_complete_task(struct se_task *, int); 52void transport_complete_task(struct se_task *, int);
53 53
54void target_get_task_cdb(struct se_task *, unsigned char *);
55
56void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *); 54void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *);
57int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *); 55int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);
58int transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *); 56int transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *);