aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/target/target_core_spc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/target/target_core_spc.c')
-rw-r--r--drivers/target/target_core_spc.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/drivers/target/target_core_spc.c b/drivers/target/target_core_spc.c
index 2a91ed3ef380..cb0461a10808 100644
--- a/drivers/target/target_core_spc.c
+++ b/drivers/target/target_core_spc.c
@@ -287,8 +287,8 @@ check_t10_vend_desc:
287 /* Skip over Obsolete field in RTPI payload 287 /* Skip over Obsolete field in RTPI payload
288 * in Table 472 */ 288 * in Table 472 */
289 off += 2; 289 off += 2;
290 buf[off++] = ((lun->lun_rtpi >> 8) & 0xff); 290 put_unaligned_be16(lun->lun_rtpi, &buf[off]);
291 buf[off++] = (lun->lun_rtpi & 0xff); 291 off += 2;
292 len += 8; /* Header size + Designation descriptor */ 292 len += 8; /* Header size + Designation descriptor */
293 /* 293 /*
294 * Target port group identifier, see spc4r17 294 * Target port group identifier, see spc4r17
@@ -316,8 +316,8 @@ check_t10_vend_desc:
316 off++; /* Skip over Reserved */ 316 off++; /* Skip over Reserved */
317 buf[off++] = 4; /* DESIGNATOR LENGTH */ 317 buf[off++] = 4; /* DESIGNATOR LENGTH */
318 off += 2; /* Skip over Reserved Field */ 318 off += 2; /* Skip over Reserved Field */
319 buf[off++] = ((tg_pt_gp_id >> 8) & 0xff); 319 put_unaligned_be16(tg_pt_gp_id, &buf[off]);
320 buf[off++] = (tg_pt_gp_id & 0xff); 320 off += 2;
321 len += 8; /* Header size + Designation descriptor */ 321 len += 8; /* Header size + Designation descriptor */
322 /* 322 /*
323 * Logical Unit Group identifier, see spc4r17 323 * Logical Unit Group identifier, see spc4r17
@@ -343,8 +343,8 @@ check_lu_gp:
343 off++; /* Skip over Reserved */ 343 off++; /* Skip over Reserved */
344 buf[off++] = 4; /* DESIGNATOR LENGTH */ 344 buf[off++] = 4; /* DESIGNATOR LENGTH */
345 off += 2; /* Skip over Reserved Field */ 345 off += 2; /* Skip over Reserved Field */
346 buf[off++] = ((lu_gp_id >> 8) & 0xff); 346 put_unaligned_be16(lu_gp_id, &buf[off]);
347 buf[off++] = (lu_gp_id & 0xff); 347 off += 2;
348 len += 8; /* Header size + Designation descriptor */ 348 len += 8; /* Header size + Designation descriptor */
349 /* 349 /*
350 * SCSI name string designator, see spc4r17 350 * SCSI name string designator, see spc4r17
@@ -431,8 +431,7 @@ check_scsi_name:
431 /* Header size + Designation descriptor */ 431 /* Header size + Designation descriptor */
432 len += (scsi_target_len + 4); 432 len += (scsi_target_len + 4);
433 } 433 }
434 buf[2] = ((len >> 8) & 0xff); 434 put_unaligned_be16(len, &buf[2]); /* Page Length for VPD 0x83 */
435 buf[3] = (len & 0xff); /* Page Length for VPD 0x83 */
436 return 0; 435 return 0;
437} 436}
438EXPORT_SYMBOL(spc_emulate_evpd_83); 437EXPORT_SYMBOL(spc_emulate_evpd_83);
@@ -1288,7 +1287,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1288 cmd->execute_cmd = spc_emulate_modeselect; 1287 cmd->execute_cmd = spc_emulate_modeselect;
1289 break; 1288 break;
1290 case MODE_SELECT_10: 1289 case MODE_SELECT_10:
1291 *size = (cdb[7] << 8) + cdb[8]; 1290 *size = get_unaligned_be16(&cdb[7]);
1292 cmd->execute_cmd = spc_emulate_modeselect; 1291 cmd->execute_cmd = spc_emulate_modeselect;
1293 break; 1292 break;
1294 case MODE_SENSE: 1293 case MODE_SENSE:
@@ -1296,25 +1295,25 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1296 cmd->execute_cmd = spc_emulate_modesense; 1295 cmd->execute_cmd = spc_emulate_modesense;
1297 break; 1296 break;
1298 case MODE_SENSE_10: 1297 case MODE_SENSE_10:
1299 *size = (cdb[7] << 8) + cdb[8]; 1298 *size = get_unaligned_be16(&cdb[7]);
1300 cmd->execute_cmd = spc_emulate_modesense; 1299 cmd->execute_cmd = spc_emulate_modesense;
1301 break; 1300 break;
1302 case LOG_SELECT: 1301 case LOG_SELECT:
1303 case LOG_SENSE: 1302 case LOG_SENSE:
1304 *size = (cdb[7] << 8) + cdb[8]; 1303 *size = get_unaligned_be16(&cdb[7]);
1305 break; 1304 break;
1306 case PERSISTENT_RESERVE_IN: 1305 case PERSISTENT_RESERVE_IN:
1307 *size = (cdb[7] << 8) + cdb[8]; 1306 *size = get_unaligned_be16(&cdb[7]);
1308 cmd->execute_cmd = target_scsi3_emulate_pr_in; 1307 cmd->execute_cmd = target_scsi3_emulate_pr_in;
1309 break; 1308 break;
1310 case PERSISTENT_RESERVE_OUT: 1309 case PERSISTENT_RESERVE_OUT:
1311 *size = (cdb[7] << 8) + cdb[8]; 1310 *size = get_unaligned_be32(&cdb[5]);
1312 cmd->execute_cmd = target_scsi3_emulate_pr_out; 1311 cmd->execute_cmd = target_scsi3_emulate_pr_out;
1313 break; 1312 break;
1314 case RELEASE: 1313 case RELEASE:
1315 case RELEASE_10: 1314 case RELEASE_10:
1316 if (cdb[0] == RELEASE_10) 1315 if (cdb[0] == RELEASE_10)
1317 *size = (cdb[7] << 8) | cdb[8]; 1316 *size = get_unaligned_be16(&cdb[7]);
1318 else 1317 else
1319 *size = cmd->data_length; 1318 *size = cmd->data_length;
1320 1319
@@ -1327,7 +1326,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1327 * Assume the passthrough or $FABRIC_MOD will tell us about it. 1326 * Assume the passthrough or $FABRIC_MOD will tell us about it.
1328 */ 1327 */
1329 if (cdb[0] == RESERVE_10) 1328 if (cdb[0] == RESERVE_10)
1330 *size = (cdb[7] << 8) | cdb[8]; 1329 *size = get_unaligned_be16(&cdb[7]);
1331 else 1330 else
1332 *size = cmd->data_length; 1331 *size = cmd->data_length;
1333 1332
@@ -1338,7 +1337,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1338 cmd->execute_cmd = spc_emulate_request_sense; 1337 cmd->execute_cmd = spc_emulate_request_sense;
1339 break; 1338 break;
1340 case INQUIRY: 1339 case INQUIRY:
1341 *size = (cdb[3] << 8) + cdb[4]; 1340 *size = get_unaligned_be16(&cdb[3]);
1342 1341
1343 /* 1342 /*
1344 * Do implicit HEAD_OF_QUEUE processing for INQUIRY. 1343 * Do implicit HEAD_OF_QUEUE processing for INQUIRY.
@@ -1349,7 +1348,7 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1349 break; 1348 break;
1350 case SECURITY_PROTOCOL_IN: 1349 case SECURITY_PROTOCOL_IN:
1351 case SECURITY_PROTOCOL_OUT: 1350 case SECURITY_PROTOCOL_OUT:
1352 *size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9]; 1351 *size = get_unaligned_be32(&cdb[6]);
1353 break; 1352 break;
1354 case EXTENDED_COPY: 1353 case EXTENDED_COPY:
1355 *size = get_unaligned_be32(&cdb[10]); 1354 *size = get_unaligned_be32(&cdb[10]);
@@ -1361,19 +1360,18 @@ spc_parse_cdb(struct se_cmd *cmd, unsigned int *size)
1361 break; 1360 break;
1362 case READ_ATTRIBUTE: 1361 case READ_ATTRIBUTE:
1363 case WRITE_ATTRIBUTE: 1362 case WRITE_ATTRIBUTE:
1364 *size = (cdb[10] << 24) | (cdb[11] << 16) | 1363 *size = get_unaligned_be32(&cdb[10]);
1365 (cdb[12] << 8) | cdb[13];
1366 break; 1364 break;
1367 case RECEIVE_DIAGNOSTIC: 1365 case RECEIVE_DIAGNOSTIC:
1368 case SEND_DIAGNOSTIC: 1366 case SEND_DIAGNOSTIC:
1369 *size = (cdb[3] << 8) | cdb[4]; 1367 *size = get_unaligned_be16(&cdb[3]);
1370 break; 1368 break;
1371 case WRITE_BUFFER: 1369 case WRITE_BUFFER:
1372 *size = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8]; 1370 *size = get_unaligned_be24(&cdb[6]);
1373 break; 1371 break;
1374 case REPORT_LUNS: 1372 case REPORT_LUNS:
1375 cmd->execute_cmd = spc_emulate_report_luns; 1373 cmd->execute_cmd = spc_emulate_report_luns;
1376 *size = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9]; 1374 *size = get_unaligned_be32(&cdb[6]);
1377 /* 1375 /*
1378 * Do implicit HEAD_OF_QUEUE processing for REPORT_LUNS 1376 * Do implicit HEAD_OF_QUEUE processing for REPORT_LUNS
1379 * See spc4r17 section 5.3 1377 * See spc4r17 section 5.3