scsi: Improve scsi_get_sense_info_fld
authorDamien Le Moal <damien.lemoal@wdc.com>
Mon, 24 Apr 2017 07:51:12 +0000 (16:51 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 25 Apr 2017 17:00:56 +0000 (13:00 -0400)
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>
drivers/scsi/scsi_error.c
include/scsi/scsi_eh.h

index 53e3343..d70c67c 100644 (file)
@@ -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);
index a25b328..64d30d8 100644 (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));
 }
 
-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 *);