ata: libata-scsi: simplify __ata_scsi_queuecmd()
[ 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>
This commit is contained in:
parent
03aabcb88a
commit
4034d06a4d
@ -4034,42 +4034,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))
|
||||
} else 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;
|
||||
|
||||
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;
|
||||
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",
|
||||
|
Loading…
Reference in New Issue
Block a user