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:
Damien Le Moal 2017-04-24 16:51:12 +09:00 committed by Martin K. Petersen
parent d227ec267f
commit 2908769c35
2 changed files with 17 additions and 25 deletions

View File

@ -46,6 +46,8 @@
#include <trace/events/scsi.h> #include <trace/events/scsi.h>
#include <asm/unaligned.h>
static void scsi_eh_done(struct scsi_cmnd *scmd); 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. * field will be placed if found.
* *
* Return value: * 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, bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
u64 * info_out) u64 *info_out)
{ {
int j;
const u8 * ucp; const u8 * ucp;
u64 ull;
if (sb_len < 7) if (sb_len < 7)
return 0; return false;
switch (sense_buffer[0] & 0x7f) { switch (sense_buffer[0] & 0x7f) {
case 0x70: case 0x70:
case 0x71: case 0x71:
if (sense_buffer[0] & 0x80) { if (sense_buffer[0] & 0x80) {
*info_out = (sense_buffer[3] << 24) + *info_out = get_unaligned_be32(&sense_buffer[3]);
(sense_buffer[4] << 16) + return true;
(sense_buffer[5] << 8) + sense_buffer[6]; }
return 1; return false;
} else
return 0;
case 0x72: case 0x72:
case 0x73: case 0x73:
ucp = scsi_sense_desc_find(sense_buffer, sb_len, ucp = scsi_sense_desc_find(sense_buffer, sb_len,
0 /* info desc */); 0 /* info desc */);
if (ucp && (0xa == ucp[1])) { if (ucp && (0xa == ucp[1])) {
ull = 0; *info_out = get_unaligned_be64(&ucp[4]);
for (j = 0; j < 8; ++j) { return true;
if (j > 0) }
ull <<= 8; return false;
ull |= ucp[4 + j];
}
*info_out = ull;
return 1;
} else
return 0;
default: default:
return 0; return false;
} }
} }
EXPORT_SYMBOL(scsi_get_sense_info_fld); EXPORT_SYMBOL(scsi_get_sense_info_fld);

View File

@ -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)); return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1));
} }
extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len, extern bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
u64 * info_out); u64 *info_out);
extern int scsi_ioctl_reset(struct scsi_device *, int __user *); extern int scsi_ioctl_reset(struct scsi_device *, int __user *);