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 <bart.vanassche@sandisk.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Cc: Andy Grover <agrover@redhat.com>
Cc: David Disseldorp <ddiss@suse.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
committed by
Nicholas Bellinger
parent
f2b72d6a8e
commit
a85d667e58
@@ -1562,10 +1562,7 @@ core_scsi3_decode_spec_i_port(
|
||||
* first extract TransportID Parameter Data Length, and make sure
|
||||
* the value matches up to the SCSI expected data transfer length.
|
||||
*/
|
||||
tpdl = (buf[24] & 0xff) << 24;
|
||||
tpdl |= (buf[25] & 0xff) << 16;
|
||||
tpdl |= (buf[26] & 0xff) << 8;
|
||||
tpdl |= buf[27] & 0xff;
|
||||
tpdl = get_unaligned_be32(&buf[24]);
|
||||
|
||||
if ((tpdl + 28) != cmd->data_length) {
|
||||
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,
|
||||
goto out_put_pr_reg;
|
||||
}
|
||||
|
||||
rtpi = (buf[18] & 0xff) << 8;
|
||||
rtpi |= buf[19] & 0xff;
|
||||
tid_len = (buf[20] & 0xff) << 24;
|
||||
tid_len |= (buf[21] & 0xff) << 16;
|
||||
tid_len |= (buf[22] & 0xff) << 8;
|
||||
tid_len |= buf[23] & 0xff;
|
||||
rtpi = get_unaligned_be16(&buf[18]);
|
||||
tid_len = get_unaligned_be32(&buf[20]);
|
||||
transport_kunmap_data_sg(cmd);
|
||||
buf = NULL;
|
||||
|
||||
@@ -3552,16 +3545,6 @@ out_put_pr_reg:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static unsigned long long core_scsi3_extract_reservation_key(unsigned char *cdb)
|
||||
{
|
||||
unsigned int __v1, __v2;
|
||||
|
||||
__v1 = (cdb[0] << 24) | (cdb[1] << 16) | (cdb[2] << 8) | cdb[3];
|
||||
__v2 = (cdb[4] << 24) | (cdb[5] << 16) | (cdb[6] << 8) | cdb[7];
|
||||
|
||||
return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32;
|
||||
}
|
||||
|
||||
/*
|
||||
* See spc4r17 section 6.14 Table 170
|
||||
*/
|
||||
@@ -3619,8 +3602,8 @@ target_scsi3_emulate_pr_out(struct se_cmd *cmd)
|
||||
/*
|
||||
* From PERSISTENT_RESERVE_OUT parameter list (payload)
|
||||
*/
|
||||
res_key = core_scsi3_extract_reservation_key(&buf[0]);
|
||||
sa_res_key = core_scsi3_extract_reservation_key(&buf[8]);
|
||||
res_key = get_unaligned_be64(&buf[0]);
|
||||
sa_res_key = get_unaligned_be64(&buf[8]);
|
||||
/*
|
||||
* REGISTER_AND_MOVE uses a different SA parameter list containing
|
||||
* SCSI TransportIDs.
|
||||
@@ -3734,10 +3717,7 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
|
||||
if (!buf)
|
||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
|
||||
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
|
||||
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
|
||||
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
|
||||
buf[3] = (dev->t10_pr.pr_generation & 0xff);
|
||||
put_unaligned_be32(dev->t10_pr.pr_generation, buf);
|
||||
|
||||
spin_lock(&dev->t10_pr.registration_lock);
|
||||
list_for_each_entry(pr_reg, &dev->t10_pr.registration_list,
|
||||
@@ -3749,23 +3729,13 @@ core_scsi3_pri_read_keys(struct se_cmd *cmd)
|
||||
if ((add_len + 8) > (cmd->data_length - 8))
|
||||
break;
|
||||
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
|
||||
buf[off++] = (pr_reg->pr_res_key & 0xff);
|
||||
|
||||
put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
|
||||
off += 8;
|
||||
add_len += 8;
|
||||
}
|
||||
spin_unlock(&dev->t10_pr.registration_lock);
|
||||
|
||||
buf[4] = ((add_len >> 24) & 0xff);
|
||||
buf[5] = ((add_len >> 16) & 0xff);
|
||||
buf[6] = ((add_len >> 8) & 0xff);
|
||||
buf[7] = (add_len & 0xff);
|
||||
put_unaligned_be32(add_len, &buf[4]);
|
||||
|
||||
transport_kunmap_data_sg(cmd);
|
||||
|
||||
@@ -3796,10 +3766,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
|
||||
if (!buf)
|
||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
|
||||
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
|
||||
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
|
||||
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
|
||||
buf[3] = (dev->t10_pr.pr_generation & 0xff);
|
||||
put_unaligned_be32(dev->t10_pr.pr_generation, &buf[0]);
|
||||
|
||||
spin_lock(&dev->dev_reservation_lock);
|
||||
pr_reg = dev->dev_pr_res_holder;
|
||||
@@ -3807,10 +3774,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
|
||||
/*
|
||||
* Set the hardcoded Additional Length
|
||||
*/
|
||||
buf[4] = ((add_len >> 24) & 0xff);
|
||||
buf[5] = ((add_len >> 16) & 0xff);
|
||||
buf[6] = ((add_len >> 8) & 0xff);
|
||||
buf[7] = (add_len & 0xff);
|
||||
put_unaligned_be32(add_len, &buf[4]);
|
||||
|
||||
if (cmd->data_length < 22)
|
||||
goto err;
|
||||
@@ -3837,14 +3801,7 @@ core_scsi3_pri_read_reservation(struct se_cmd *cmd)
|
||||
else
|
||||
pr_res_key = pr_reg->pr_res_key;
|
||||
|
||||
buf[8] = ((pr_res_key >> 56) & 0xff);
|
||||
buf[9] = ((pr_res_key >> 48) & 0xff);
|
||||
buf[10] = ((pr_res_key >> 40) & 0xff);
|
||||
buf[11] = ((pr_res_key >> 32) & 0xff);
|
||||
buf[12] = ((pr_res_key >> 24) & 0xff);
|
||||
buf[13] = ((pr_res_key >> 16) & 0xff);
|
||||
buf[14] = ((pr_res_key >> 8) & 0xff);
|
||||
buf[15] = (pr_res_key & 0xff);
|
||||
put_unaligned_be64(pr_res_key, &buf[8]);
|
||||
/*
|
||||
* Set the SCOPE and TYPE
|
||||
*/
|
||||
@@ -3882,8 +3839,7 @@ core_scsi3_pri_report_capabilities(struct se_cmd *cmd)
|
||||
if (!buf)
|
||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
|
||||
buf[0] = ((add_len >> 8) & 0xff);
|
||||
buf[1] = (add_len & 0xff);
|
||||
put_unaligned_be16(add_len, &buf[0]);
|
||||
buf[2] |= 0x10; /* CRH: Compatible Reservation Hanlding bit. */
|
||||
buf[2] |= 0x08; /* SIP_C: Specify Initiator Ports Capable bit */
|
||||
buf[2] |= 0x04; /* ATP_C: All Target Ports Capable bit */
|
||||
@@ -3947,10 +3903,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
|
||||
if (!buf)
|
||||
return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE;
|
||||
|
||||
buf[0] = ((dev->t10_pr.pr_generation >> 24) & 0xff);
|
||||
buf[1] = ((dev->t10_pr.pr_generation >> 16) & 0xff);
|
||||
buf[2] = ((dev->t10_pr.pr_generation >> 8) & 0xff);
|
||||
buf[3] = (dev->t10_pr.pr_generation & 0xff);
|
||||
put_unaligned_be32(dev->t10_pr.pr_generation, &buf[0]);
|
||||
|
||||
spin_lock(&dev->dev_reservation_lock);
|
||||
if (dev->dev_pr_res_holder) {
|
||||
@@ -3992,14 +3945,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
|
||||
/*
|
||||
* Set RESERVATION KEY
|
||||
*/
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 56) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 48) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 40) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 32) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 24) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 16) & 0xff);
|
||||
buf[off++] = ((pr_reg->pr_res_key >> 8) & 0xff);
|
||||
buf[off++] = (pr_reg->pr_res_key & 0xff);
|
||||
put_unaligned_be64(pr_reg->pr_res_key, &buf[off]);
|
||||
off += 8;
|
||||
off += 4; /* Skip Over Reserved area */
|
||||
|
||||
/*
|
||||
@@ -4041,8 +3988,8 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
|
||||
if (!pr_reg->pr_reg_all_tg_pt) {
|
||||
u16 sep_rtpi = pr_reg->tg_pt_sep_rtpi;
|
||||
|
||||
buf[off++] = ((sep_rtpi >> 8) & 0xff);
|
||||
buf[off++] = (sep_rtpi & 0xff);
|
||||
put_unaligned_be16(sep_rtpi, &buf[off]);
|
||||
off += 2;
|
||||
} else
|
||||
off += 2; /* Skip over RELATIVE TARGET PORT IDENTIFIER */
|
||||
|
||||
@@ -4062,10 +4009,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
|
||||
/*
|
||||
* Set the ADDITIONAL DESCRIPTOR LENGTH
|
||||
*/
|
||||
buf[off++] = ((desc_len >> 24) & 0xff);
|
||||
buf[off++] = ((desc_len >> 16) & 0xff);
|
||||
buf[off++] = ((desc_len >> 8) & 0xff);
|
||||
buf[off++] = (desc_len & 0xff);
|
||||
put_unaligned_be32(desc_len, &buf[off]);
|
||||
/*
|
||||
* Size of full desctipor header minus TransportID
|
||||
* containing $FABRIC_MOD specific) initiator device/port
|
||||
@@ -4082,10 +4026,7 @@ core_scsi3_pri_read_full_status(struct se_cmd *cmd)
|
||||
/*
|
||||
* Set ADDITIONAL_LENGTH
|
||||
*/
|
||||
buf[4] = ((add_len >> 24) & 0xff);
|
||||
buf[5] = ((add_len >> 16) & 0xff);
|
||||
buf[6] = ((add_len >> 8) & 0xff);
|
||||
buf[7] = (add_len & 0xff);
|
||||
put_unaligned_be32(add_len, &buf[4]);
|
||||
|
||||
transport_kunmap_data_sg(cmd);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user