@@ -1562,10 +1562,7 @@ core_scsi3_decode_spec_i_port(
1562
1562
* first extract TransportID Parameter Data Length, and make sure
1563
1563
* the value matches up to the SCSI expected data transfer length.
1564
1564
*/
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 ]);
1569
1566
1570
1567
if ((tpdl + 28 ) != cmd -> data_length ) {
1571
1568
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,
3221
3218
goto out_put_pr_reg ;
3222
3219
}
3223
3220
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 ]);
3230
3223
transport_kunmap_data_sg (cmd );
3231
3224
buf = NULL ;
3232
3225
@@ -3552,16 +3545,6 @@ core_scsi3_emulate_pro_register_and_move(struct se_cmd *cmd, u64 res_key,
3552
3545
return ret ;
3553
3546
}
3554
3547
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
-
3565
3548
/*
3566
3549
* See spc4r17 section 6.14 Table 170
3567
3550
*/
@@ -3619,8 +3602,8 @@ target_scsi3_emulate_pr_out(struct se_cmd *cmd)
3619
3602
/*
3620
3603
* From PERSISTENT_RESERVE_OUT parameter list (payload)
3621
3604
*/
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 ]);
3624
3607
/*
3625
3608
* REGISTER_AND_MOVE uses a different SA parameter list containing
3626
3609
* SCSI TransportIDs.
@@ -3734,10 +3717,7 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
3734
3717
if (!buf )
3735
3718
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ;
3736
3719
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 );
3741
3721
3742
3722
spin_lock (& dev -> t10_pr .registration_lock );
3743
3723
list_for_each_entry (pr_reg , & dev -> t10_pr .registration_list ,
@@ -3749,23 +3729,13 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
3749
3729
if ((add_len + 8 ) > (cmd -> data_length - 8 ))
3750
3730
break ;
3751
3731
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 ;
3761
3734
add_len += 8 ;
3762
3735
}
3763
3736
spin_unlock (& dev -> t10_pr .registration_lock );
3764
3737
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 ]);
3769
3739
3770
3740
transport_kunmap_data_sg (cmd );
3771
3741
@@ -3796,21 +3766,15 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
3796
3766
if (!buf )
3797
3767
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ;
3798
3768
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 ]);
3803
3770
3804
3771
spin_lock (& dev -> dev_reservation_lock );
3805
3772
pr_reg = dev -> dev_pr_res_holder ;
3806
3773
if (pr_reg ) {
3807
3774
/*
3808
3775
* Set the hardcoded Additional Length
3809
3776
*/
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 ]);
3814
3778
3815
3779
if (cmd -> data_length < 22 )
3816
3780
goto err ;
@@ -3837,14 +3801,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
3837
3801
else
3838
3802
pr_res_key = pr_reg -> pr_res_key ;
3839
3803
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 ]);
3848
3805
/*
3849
3806
* Set the SCOPE and TYPE
3850
3807
*/
@@ -3882,8 +3839,7 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd)
3882
3839
if (!buf )
3883
3840
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ;
3884
3841
3885
- buf [0 ] = ((add_len >> 8 ) & 0xff );
3886
- buf [1 ] = (add_len & 0xff );
3842
+ put_unaligned_be16 (add_len , & buf [0 ]);
3887
3843
buf [2 ] |= 0x10 ; /* CRH: Compatible Reservation Hanlding bit. */
3888
3844
buf [2 ] |= 0x08 ; /* SIP_C: Specify Initiator Ports Capable bit */
3889
3845
buf [2 ] |= 0x04 ; /* ATP_C: All Target Ports Capable bit */
@@ -3947,10 +3903,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
3947
3903
if (!buf )
3948
3904
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE ;
3949
3905
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 ]);
3954
3907
3955
3908
spin_lock (& dev -> dev_reservation_lock );
3956
3909
if (dev -> dev_pr_res_holder ) {
@@ -3992,14 +3945,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
3992
3945
/*
3993
3946
* Set RESERVATION KEY
3994
3947
*/
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 ;
4003
3950
off += 4 ; /* Skip Over Reserved area */
4004
3951
4005
3952
/*
@@ -4041,8 +3988,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
4041
3988
if (!pr_reg -> pr_reg_all_tg_pt ) {
4042
3989
u16 sep_rtpi = pr_reg -> tg_pt_sep_rtpi ;
4043
3990
4044
- buf [ off ++ ] = (( sep_rtpi >> 8 ) & 0xff );
4045
- buf [ off ++ ] = ( sep_rtpi & 0xff ) ;
3991
+ put_unaligned_be16 ( sep_rtpi , & buf [ off ] );
3992
+ off += 2 ;
4046
3993
} else
4047
3994
off += 2 ; /* Skip over RELATIVE TARGET PORT IDENTIFIER */
4048
3995
@@ -4062,10 +4009,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
4062
4009
/*
4063
4010
* Set the ADDITIONAL DESCRIPTOR LENGTH
4064
4011
*/
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 ]);
4069
4013
/*
4070
4014
* Size of full desctipor header minus TransportID
4071
4015
* containing $FABRIC_MOD specific) initiator device/port
@@ -4082,10 +4026,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
4082
4026
/*
4083
4027
* Set ADDITIONAL_LENGTH
4084
4028
*/
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 ]);
4089
4030
4090
4031
transport_kunmap_data_sg (cmd );
4091
4032
0 commit comments