diff options
Diffstat (limited to 'drivers/target/target_core_spc.c')
-rw-r--r-- | drivers/target/target_core_spc.c | 42 |
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 | } |
438 | EXPORT_SYMBOL(spc_emulate_evpd_83); | 437 | EXPORT_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 |