Skip to content

Commit a85d667

Browse files
Bart Van AsscheNicholas Bellinger
authored andcommitted
target: Use {get,put}_unaligned_be*() instead of open coding these functions
Introduce the function get_unaligned_be24(). Use {get,put}_unaligned_be*() where appropriate. This patch does not change any functionality. Signed-off-by: Bart Van Assche <[email protected]> Reviewed-by: Christoph Hellwig <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Cc: Andy Grover <[email protected]> Cc: David Disseldorp <[email protected]> Signed-off-by: Nicholas Bellinger <[email protected]>
1 parent f2b72d6 commit a85d667

File tree

9 files changed

+83
-171
lines changed

9 files changed

+83
-171
lines changed

drivers/target/target_core_alua.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ target_emulate_report_target_port_groups(struct se_cmd *cmd)
205205
/*
206206
* TARGET PORT GROUP
207207
*/
208-
buf[off++] = ((tg_pt_gp->tg_pt_gp_id >> 8) & 0xff);
209-
buf[off++] = (tg_pt_gp->tg_pt_gp_id & 0xff);
208+
put_unaligned_be16(tg_pt_gp->tg_pt_gp_id, &buf[off]);
209+
off += 2;
210210

211211
off++; /* Skip over Reserved */
212212
/*
@@ -235,8 +235,8 @@ target_emulate_report_target_port_groups(struct se_cmd *cmd)
235235
/*
236236
* Set RELATIVE TARGET PORT IDENTIFIER
237237
*/
238-
buf[off++] = ((lun->lun_rtpi >> 8) & 0xff);
239-
buf[off++] = (lun->lun_rtpi & 0xff);
238+
put_unaligned_be16(lun->lun_rtpi, &buf[off]);
239+
off += 2;
240240
rd_len += 4;
241241
}
242242
spin_unlock(&tg_pt_gp->tg_pt_gp_lock);

drivers/target/target_core_device.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1091,27 +1091,27 @@ passthrough_parse_cdb(struct se_cmd *cmd,
10911091
TRANSPORT_FLAG_PASSTHROUGH_PGR)) {
10921092
if (cdb[0] == PERSISTENT_RESERVE_IN) {
10931093
cmd->execute_cmd = target_scsi3_emulate_pr_in;
1094-
size = (cdb[7] << 8) + cdb[8];
1094+
size = get_unaligned_be16(&cdb[7]);
10951095
return target_cmd_size_check(cmd, size);
10961096
}
10971097
if (cdb[0] == PERSISTENT_RESERVE_OUT) {
10981098
cmd->execute_cmd = target_scsi3_emulate_pr_out;
1099-
size = (cdb[7] << 8) + cdb[8];
1099+
size = get_unaligned_be16(&cdb[7]);
11001100
return target_cmd_size_check(cmd, size);
11011101
}
11021102

11031103
if (cdb[0] == RELEASE || cdb[0] == RELEASE_10) {
11041104
cmd->execute_cmd = target_scsi2_reservation_release;
11051105
if (cdb[0] == RELEASE_10)
1106-
size = (cdb[7] << 8) | cdb[8];
1106+
size = get_unaligned_be16(&cdb[7]);
11071107
else
11081108
size = cmd->data_length;
11091109
return target_cmd_size_check(cmd, size);
11101110
}
11111111
if (cdb[0] == RESERVE || cdb[0] == RESERVE_10) {
11121112
cmd->execute_cmd = target_scsi2_reservation_reserve;
11131113
if (cdb[0] == RESERVE_10)
1114-
size = (cdb[7] << 8) | cdb[8];
1114+
size = get_unaligned_be16(&cdb[7]);
11151115
else
11161116
size = cmd->data_length;
11171117
return target_cmd_size_check(cmd, size);

drivers/target/target_core_fabric_lib.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#include <linux/ctype.h>
3535
#include <linux/spinlock.h>
3636
#include <linux/export.h>
37+
#include <asm/unaligned.h>
3738

3839
#include <scsi/scsi_proto.h>
3940

@@ -216,8 +217,7 @@ static int iscsi_get_pr_transport_id(
216217
if (padding != 0)
217218
len += padding;
218219

219-
buf[2] = ((len >> 8) & 0xff);
220-
buf[3] = (len & 0xff);
220+
put_unaligned_be16(len, &buf[2]);
221221
/*
222222
* Increment value for total payload + header length for
223223
* full status descriptor
@@ -306,7 +306,7 @@ static char *iscsi_parse_pr_out_transport_id(
306306
*/
307307
if (out_tid_len) {
308308
/* The shift works thanks to integer promotion rules */
309-
add_len = (buf[2] << 8) | buf[3];
309+
add_len = get_unaligned_be16(&buf[2]);
310310

311311
tid_len = strlen(&buf[4]);
312312
tid_len += 4; /* Add four bytes for iSCSI Transport ID header */

drivers/target/target_core_pr.c

Lines changed: 20 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1562,10 +1562,7 @@ core_scsi3_decode_spec_i_port(
15621562
* first extract TransportID Parameter Data Length, and make sure
15631563
* the value matches up to the SCSI expected data transfer length.
15641564
*/
1565-
tpdl = (buf[24] & 0xff) << 24;
1566-
tpdl |= (buf[25] & 0xff) << 16;
1567-
tpdl |= (buf[26] & 0xff) << 8;
1568-
tpdl |= buf[27] & 0xff;
1565+
tpdl = get_unaligned_be32(&buf[24]);
15691566

15701567
if ((tpdl + 28) != cmd->data_length) {
15711568
pr_err("SPC-3 PR: Illegal tpdl: %u + 28 byte header"
@@ -3221,12 +3218,8 @@ core_scsi3_emulate_pro_register_and_move(struct se_cmd *cmd, u64 res_key,
32213218
goto out_put_pr_reg;
32223219
}
32233220

3224-
rtpi = (buf[18] & 0xff) << 8;
3225-
rtpi |= buf[19] & 0xff;
3226-
tid_len = (buf[20] & 0xff) << 24;
3227-
tid_len |= (buf[21] & 0xff) << 16;
3228-
tid_len |= (buf[22] & 0xff) << 8;
3229-
tid_len |= buf[23] & 0xff;
3221+
rtpi = get_unaligned_be16(&buf[18]);
3222+
tid_len = get_unaligned_be32(&buf[20]);
32303223
transport_kunmap_data_sg(cmd);
32313224
buf = NULL;
32323225

@@ -3552,16 +3545,6 @@ core_scsi3_emulate_pro_register_and_move(struct se_cmd *cmd, u64 res_key,
35523545
return ret;
35533546
}
35543547

3555-
static unsigned long long core_scsi3_extract_reservation_key(unsigned char *cdb)
3556-
{
3557-
unsigned int __v1, __v2;
3558-
3559-
__v1 = (cdb[0] << 24) | (cdb[1] << 16) | (cdb[2] << 8) | cdb[3];
3560-
__v2 = (cdb[4] << 24) | (cdb[5] << 16) | (cdb[6] << 8) | cdb[7];
3561-
3562-
return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
3563-
}
3564-
35653548
/*
35663549
* See spc4r17 section 6.14 Table 170
35673550
*/
@@ -3619,8 +3602,8 @@ target_scsi3_emulate_pr_out(struct se_cmd *cmd)
36193602
/*
36203603
* From PERSISTENT_RESERVE_OUT parameter list (payload)
36213604
*/
3622-
res_key = core_scsi3_extract_reservation_key(&buf[0]);
3623-
sa_res_key = core_scsi3_extract_reservation_key(&buf[8]);
3605+
res_key = get_unaligned_be64(&buf[0]);
3606+
sa_res_key = get_unaligned_be64(&buf[8]);
36243607
/*
36253608
* REGISTER_AND_MOVE uses a different SA parameter list containing
36263609
* SCSI TransportIDs.
@@ -3734,10 +3717,7 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
37343717
if (!buf)
37353718
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
37363719

3737-
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
3738-
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
3739-
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
3740-
buf[3] = (dev->t10_pr.pr_generation & 0xff);
3720+
put_unaligned_be32(dev->t10_pr.pr_generation, buf);
37413721

37423722
spin_lock(&dev->t10_pr.registration_lock);
37433723
list_for_each_entry(pr_reg, &dev->t10_pr.registration_list,
@@ -3749,23 +3729,13 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
37493729
if ((add_len + 8) > (cmd->data_length - 8))
37503730
break;
37513731

3752-
buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
3753-
buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
3754-
buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
3755-
buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
3756-
buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
3757-
buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
3758-
buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
3759-
buf[off++] = (pr_reg->pr_res_key & 0xff);
3760-
3732+
put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
3733+
off += 8;
37613734
add_len += 8;
37623735
}
37633736
spin_unlock(&dev->t10_pr.registration_lock);
37643737

3765-
buf[4] = ((add_len >> 24) & 0xff);
3766-
buf[5] = ((add_len >> 16) & 0xff);
3767-
buf[6] = ((add_len >> 8) & 0xff);
3768-
buf[7] = (add_len & 0xff);
3738+
put_unaligned_be32(add_len, &buf[4]);
37693739

37703740
transport_kunmap_data_sg(cmd);
37713741

@@ -3796,21 +3766,15 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
37963766
if (!buf)
37973767
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
37983768

3799-
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
3800-
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
3801-
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
3802-
buf[3] = (dev->t10_pr.pr_generation & 0xff);
3769+
put_unaligned_be32(dev->t10_pr.pr_generation, &buf[0]);
38033770

38043771
spin_lock(&dev->dev_reservation_lock);
38053772
pr_reg = dev->dev_pr_res_holder;
38063773
if (pr_reg) {
38073774
/*
38083775
* Set the hardcoded Additional Length
38093776
*/
3810-
buf[4] = ((add_len >> 24) & 0xff);
3811-
buf[5] = ((add_len >> 16) & 0xff);
3812-
buf[6] = ((add_len >> 8) & 0xff);
3813-
buf[7] = (add_len & 0xff);
3777+
put_unaligned_be32(add_len, &buf[4]);
38143778

38153779
if (cmd->data_length < 22)
38163780
goto err;
@@ -3837,14 +3801,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
38373801
else
38383802
pr_res_key = pr_reg->pr_res_key;
38393803

3840-
buf[8] = ((pr_res_key >> 56) & 0xff);
3841-
buf[9] = ((pr_res_key >> 48) & 0xff);
3842-
buf[10] = ((pr_res_key >> 40) & 0xff);
3843-
buf[11] = ((pr_res_key >> 32) & 0xff);
3844-
buf[12] = ((pr_res_key >> 24) & 0xff);
3845-
buf[13] = ((pr_res_key >> 16) & 0xff);
3846-
buf[14] = ((pr_res_key >> 8) & 0xff);
3847-
buf[15] = (pr_res_key & 0xff);
3804+
put_unaligned_be64(pr_res_key, &buf[8]);
38483805
/*
38493806
* Set the SCOPE and TYPE
38503807
*/
@@ -3882,8 +3839,7 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd)
38823839
if (!buf)
38833840
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
38843841

3885-
buf[0] = ((add_len >> 8) & 0xff);
3886-
buf[1] = (add_len & 0xff);
3842+
put_unaligned_be16(add_len, &buf[0]);
38873843
buf[2] |= 0x10; /* CRH: Compatible Reservation Hanlding bit. */
38883844
buf[2] |= 0x08; /* SIP_C: Specify Initiator Ports Capable bit */
38893845
buf[2] |= 0x04; /* ATP_C: All Target Ports Capable bit */
@@ -3947,10 +3903,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
39473903
if (!buf)
39483904
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
39493905

3950-
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
3951-
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
3952-
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
3953-
buf[3] = (dev->t10_pr.pr_generation & 0xff);
3906+
put_unaligned_be32(dev->t10_pr.pr_generation, &buf[0]);
39543907

39553908
spin_lock(&dev->dev_reservation_lock);
39563909
if (dev->dev_pr_res_holder) {
@@ -3992,14 +3945,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
39923945
/*
39933946
* Set RESERVATION KEY
39943947
*/
3995-
buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
3996-
buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
3997-
buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
3998-
buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
3999-
buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
4000-
buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
4001-
buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
4002-
buf[off++] = (pr_reg->pr_res_key & 0xff);
3948+
put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
3949+
off += 8;
40033950
off += 4; /* Skip Over Reserved area */
40043951

40053952
/*
@@ -4041,8 +3988,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
40413988
if (!pr_reg->pr_reg_all_tg_pt) {
40423989
u16 sep_rtpi = pr_reg->tg_pt_sep_rtpi;
40433990

4044-
buf[off++] = ((sep_rtpi >> 8) & 0xff);
4045-
buf[off++] = (sep_rtpi & 0xff);
3991+
put_unaligned_be16(sep_rtpi, &buf[off]);
3992+
off += 2;
40463993
} else
40473994
off += 2; /* Skip over RELATIVE TARGET PORT IDENTIFIER */
40483995

@@ -4062,10 +4009,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
40624009
/*
40634010
* Set the ADDITIONAL DESCRIPTOR LENGTH
40644011
*/
4065-
buf[off++] = ((desc_len >> 24) & 0xff);
4066-
buf[off++] = ((desc_len >> 16) & 0xff);
4067-
buf[off++] = ((desc_len >> 8) & 0xff);
4068-
buf[off++] = (desc_len & 0xff);
4012+
put_unaligned_be32(desc_len, &buf[off]);
40694013
/*
40704014
* Size of full desctipor header minus TransportID
40714015
* containing $FABRIC_MOD specific) initiator device/port
@@ -4082,10 +4026,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
40824026
/*
40834027
* Set ADDITIONAL_LENGTH
40844028
*/
4085-
buf[4] = ((add_len >> 24) & 0xff);
4086-
buf[5] = ((add_len >> 16) & 0xff);
4087-
buf[6] = ((add_len >> 8) & 0xff);
4088-
buf[7] = (add_len & 0xff);
4029+
put_unaligned_be32(add_len, &buf[4]);
40894030

40904031
transport_kunmap_data_sg(cmd);
40914032

drivers/target/target_core_pscsi.c

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ static void pscsi_tape_read_blocksize(struct se_device *dev,
168168
/*
169169
* If MODE_SENSE still returns zero, set the default value to 1024.
170170
*/
171-
sdev->sector_size = (buf[9] << 16) | (buf[10] << 8) | (buf[11]);
171+
sdev->sector_size = get_unaligned_be24(&buf[9]);
172172
out_free:
173173
if (!sdev->sector_size)
174174
sdev->sector_size = 1024;
@@ -209,8 +209,7 @@ pscsi_get_inquiry_vpd_serial(struct scsi_device *sdev, struct t10_wwn *wwn)
209209
cdb[0] = INQUIRY;
210210
cdb[1] = 0x01; /* Query VPD */
211211
cdb[2] = 0x80; /* Unit Serial Number */
212-
cdb[3] = (INQUIRY_VPD_SERIAL_LEN >> 8) & 0xff;
213-
cdb[4] = (INQUIRY_VPD_SERIAL_LEN & 0xff);
212+
put_unaligned_be16(INQUIRY_VPD_SERIAL_LEN, &cdb[3]);
214213

215214
ret = scsi_execute_req(sdev, cdb, DMA_FROM_DEVICE, buf,
216215
INQUIRY_VPD_SERIAL_LEN, NULL, HZ, 1, NULL);
@@ -245,16 +244,15 @@ pscsi_get_inquiry_vpd_device_ident(struct scsi_device *sdev,
245244
cdb[0] = INQUIRY;
246245
cdb[1] = 0x01; /* Query VPD */
247246
cdb[2] = 0x83; /* Device Identifier */
248-
cdb[3] = (INQUIRY_VPD_DEVICE_IDENTIFIER_LEN >> 8) & 0xff;
249-
cdb[4] = (INQUIRY_VPD_DEVICE_IDENTIFIER_LEN & 0xff);
247+
put_unaligned_be16(INQUIRY_VPD_DEVICE_IDENTIFIER_LEN, &cdb[3]);
250248

251249
ret = scsi_execute_req(sdev, cdb, DMA_FROM_DEVICE, buf,
252250
INQUIRY_VPD_DEVICE_IDENTIFIER_LEN,
253251
NULL, HZ, 1, NULL);
254252
if (ret)
255253
goto out;
256254

257-
page_len = (buf[2] << 8) | buf[3];
255+
page_len = get_unaligned_be16(&buf[2]);
258256
while (page_len > 0) {
259257
/* Grab a pointer to the Identification descriptor */
260258
page_83 = &buf[off];
@@ -669,19 +667,17 @@ static void pscsi_transport_complete(struct se_cmd *cmd, struct scatterlist *sg,
669667
}
670668

671669
if (cdb[0] == MODE_SELECT)
672-
bdl = (buf[3]);
670+
bdl = buf[3];
673671
else
674-
bdl = (buf[6] << 8) | (buf[7]);
672+
bdl = get_unaligned_be16(&buf[6]);
675673

676674
if (!bdl)
677675
goto after_mode_select;
678676

679677
if (cdb[0] == MODE_SELECT)
680-
blocksize = (buf[9] << 16) | (buf[10] << 8) |
681-
(buf[11]);
678+
blocksize = get_unaligned_be24(&buf[9]);
682679
else
683-
blocksize = (buf[13] << 16) | (buf[14] << 8) |
684-
(buf[15]);
680+
blocksize = get_unaligned_be24(&buf[13]);
685681

686682
sd->sector_size = blocksize;
687683
}

0 commit comments

Comments
 (0)