ata: libata-scsi: simplify __ata_scsi_queuecmd()
authorWenchao Hao <haowenchao@huawei.com>
Thu, 6 Jan 2022 00:13:54 +0000 (19:13 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 Dec 2022 16:41:00 +0000 (17:41 +0100)
[ Upstream commit 84eac327af543f03172085d5ef9f98ea25a51191 ]

This patch cleans up the code of __ata_scsi_queuecmd(). Since each
branch of the "if" condition check that scmd->cmd_len is not zero, move
this check out of the "if" to simplify the conditions being checked in
the "else" branch.

While at it, avoid the if-else-if-else structure using if-else if
structure and remove the redundant rc local variable.

This patch does not change the function logic.

Signed-off-by: Wenchao Hao <haowenchao@huawei.com>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Stable-dep-of: e20e81a24a4d ("ata: libata-core: do not issue non-internal commands once EH is pending")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/ata/libata-scsi.c

index ef41cb3..61b7e0b 100644 (file)
@@ -3990,42 +3990,39 @@ int __ata_scsi_queuecmd(struct scsi_cmnd *scmd, struct ata_device *dev)
 {
        u8 scsi_op = scmd->cmnd[0];
        ata_xlat_func_t xlat_func;
-       int rc = 0;
+
+       if (unlikely(!scmd->cmd_len))
+               goto bad_cdb_len;
 
        if (dev->class == ATA_DEV_ATA || dev->class == ATA_DEV_ZAC) {
-               if (unlikely(!scmd->cmd_len || scmd->cmd_len > dev->cdb_len))
+               if (unlikely(scmd->cmd_len > dev->cdb_len))
                        goto bad_cdb_len;
 
                xlat_func = ata_get_xlat_func(dev, scsi_op);
-       } else {
-               if (unlikely(!scmd->cmd_len))
-                       goto bad_cdb_len;
+       } else if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
+               /* relay SCSI command to ATAPI device */
+               int len = COMMAND_SIZE(scsi_op);
 
-               xlat_func = NULL;
-               if (likely((scsi_op != ATA_16) || !atapi_passthru16)) {
-                       /* relay SCSI command to ATAPI device */
-                       int len = COMMAND_SIZE(scsi_op);
-                       if (unlikely(len > scmd->cmd_len ||
-                                    len > dev->cdb_len ||
-                                    scmd->cmd_len > ATAPI_CDB_LEN))
-                               goto bad_cdb_len;
+               if (unlikely(len > scmd->cmd_len ||
+                            len > dev->cdb_len ||
+                            scmd->cmd_len > ATAPI_CDB_LEN))
+                       goto bad_cdb_len;
 
-                       xlat_func = atapi_xlat;
-               } else {
-                       /* ATA_16 passthru, treat as an ATA command */
-                       if (unlikely(scmd->cmd_len > 16))
-                               goto bad_cdb_len;
+               xlat_func = atapi_xlat;
+       } else {
+               /* ATA_16 passthru, treat as an ATA command */
+               if (unlikely(scmd->cmd_len > 16))
+                       goto bad_cdb_len;
 
-                       xlat_func = ata_get_xlat_func(dev, scsi_op);
-               }
+               xlat_func = ata_get_xlat_func(dev, scsi_op);
        }
 
        if (xlat_func)
-               rc = ata_scsi_translate(dev, scmd, xlat_func);
-       else
-               ata_scsi_simulate(dev, scmd);
+               return ata_scsi_translate(dev, scmd, xlat_func);
 
-       return rc;
+       ata_scsi_simulate(dev, scmd);
+
+       return 0;
 
  bad_cdb_len:
        DPRINTK("bad CDB len=%u, scsi_op=0x%02x, max=%u\n",