Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2908769c authored by Damien Le Moal's avatar Damien Le Moal Committed by Martin K. Petersen
Browse files

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: default avatarDamien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: default avatarBart Van Assche <Bart.VanAssche@sandisk.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent d227ec26
Loading
Loading
Loading
Loading
+15 −23
Original line number Diff line number Diff line
@@ -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,
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 = get_unaligned_be64(&ucp[4]);
			return true;
		}
			*info_out = ull;
			return 1;
		} else
			return 0;
		return false;
	default:
		return 0;
		return false;
	}
}
EXPORT_SYMBOL(scsi_get_sense_info_fld);
+2 −2
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ 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,
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 *);