forked from Minki/linux
scsi: Improve scsi_get_sense_info_fld
Use get_unaligned_be32 and get_unaligned_be64 to obtain values from the sense buffer instead of open coding the operations. Also change the function return value to a bool and fix the function signature declaration to remove spaces triggering checkpatch warnings. No functional change is introduced by this patch. Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com> Reviewed-by: Bart Van Assche <Bart.VanAssche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
d227ec267f
commit
2908769c35
@ -46,6 +46,8 @@
|
||||
|
||||
#include <trace/events/scsi.h>
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
static void scsi_eh_done(struct scsi_cmnd *scmd);
|
||||
|
||||
/*
|
||||
@ -2361,44 +2363,34 @@ EXPORT_SYMBOL(scsi_command_normalize_sense);
|
||||
* field will be placed if found.
|
||||
*
|
||||
* Return value:
|
||||
* 1 if information field found, 0 if not found.
|
||||
* true if information field found, false if not found.
|
||||
*/
|
||||
int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
|
||||
u64 * info_out)
|
||||
bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
|
||||
u64 *info_out)
|
||||
{
|
||||
int j;
|
||||
const u8 * ucp;
|
||||
u64 ull;
|
||||
|
||||
if (sb_len < 7)
|
||||
return 0;
|
||||
return false;
|
||||
switch (sense_buffer[0] & 0x7f) {
|
||||
case 0x70:
|
||||
case 0x71:
|
||||
if (sense_buffer[0] & 0x80) {
|
||||
*info_out = (sense_buffer[3] << 24) +
|
||||
(sense_buffer[4] << 16) +
|
||||
(sense_buffer[5] << 8) + sense_buffer[6];
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
*info_out = get_unaligned_be32(&sense_buffer[3]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
case 0x72:
|
||||
case 0x73:
|
||||
ucp = scsi_sense_desc_find(sense_buffer, sb_len,
|
||||
0 /* info desc */);
|
||||
if (ucp && (0xa == ucp[1])) {
|
||||
ull = 0;
|
||||
for (j = 0; j < 8; ++j) {
|
||||
if (j > 0)
|
||||
ull <<= 8;
|
||||
ull |= ucp[4 + j];
|
||||
}
|
||||
*info_out = ull;
|
||||
return 1;
|
||||
} else
|
||||
return 0;
|
||||
*info_out = get_unaligned_be64(&ucp[4]);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
default:
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_get_sense_info_fld);
|
||||
|
@ -23,8 +23,8 @@ static inline bool scsi_sense_is_deferred(const struct scsi_sense_hdr *sshdr)
|
||||
return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1));
|
||||
}
|
||||
|
||||
extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
|
||||
u64 * info_out);
|
||||
extern bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
|
||||
u64 *info_out);
|
||||
|
||||
extern int scsi_ioctl_reset(struct scsi_device *, int __user *);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user