scsi: mpt3sas: Fix _ctl_set_task_mid() TaskMID check
authorDamien Le Moal <damien.lemoal@opensource.wdc.com>
Mon, 7 Mar 2022 23:48:50 +0000 (08:48 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 26 Apr 2022 02:30:04 +0000 (22:30 -0400)
The TaskMID field of struct Mpi2SCSITaskManagementRequest_t is a 16-bit
little endian value. Fix the search loop in _ctl_set_task_mid() to add a
cpu_to_le16() conversion before checking the value of TaskMID to avoid
sparse warnings. While at it, simplify the search loop code to remove an
unnecessarily complicated if condition.

Link: https://lore.kernel.org/r/20220307234854.148145-2-damien.lemoal@opensource.wdc.com
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_ctl.c

index d92ca140d298c221292dbcca60e1245ae27c2db4..84c87c2c3e7e86acca900db239a62ed8a76e23c0 100644 (file)
@@ -578,7 +578,7 @@ static int
 _ctl_set_task_mid(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command *karg,
        Mpi2SCSITaskManagementRequest_t *tm_request)
 {
-       u8 found = 0;
+       bool found = false;
        u16 smid;
        u16 handle;
        struct scsi_cmnd *scmd;
@@ -600,6 +600,7 @@ _ctl_set_task_mid(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command *karg,
        handle = le16_to_cpu(tm_request->DevHandle);
        for (smid = ioc->scsiio_depth; smid && !found; smid--) {
                struct scsiio_tracker *st;
+               __le16 task_mid;
 
                scmd = mpt3sas_scsih_scsi_lookup_get(ioc, smid);
                if (!scmd)
@@ -618,10 +619,10 @@ _ctl_set_task_mid(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command *karg,
                 * first outstanding smid will be picked up.  Otherwise,
                 * targeted smid will be the one.
                 */
-               if (!tm_request->TaskMID || tm_request->TaskMID == st->smid) {
-                       tm_request->TaskMID = cpu_to_le16(st->smid);
-                       found = 1;
-               }
+               task_mid = cpu_to_le16(st->smid);
+               if (!tm_request->TaskMID)
+                       tm_request->TaskMID = task_mid;
+               found = tm_request->TaskMID == task_mid;
        }
 
        if (!found) {