libata-scsi: Fix translation of REPORT ZONES command
authorDamien Le Moal <damien.lemoal@hgst.com>
Thu, 14 Jul 2016 00:05:49 +0000 (09:05 +0900)
committerTejun Heo <tj@kernel.org>
Fri, 15 Jul 2016 12:08:13 +0000 (08:08 -0400)
Include reporting options when translating REPORT ZONES commmand to
ATA NCQ, and make sure we only look at the actually specified bits
in the CDB for the options.

Signed-off-by: Damien Le Moal <damien.lemoal@hgst.com>
[hch: update patch description]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Tejun Heo <tj@kernel.org>
drivers/ata/libata-scsi.c

index 901b46a6e993d5837208b455a144ad4b86b9d539..45d8ae63cdf091706a53ce92ee14367bea5bab5e 100644 (file)
@@ -3468,7 +3468,7 @@ static unsigned int ata_scsi_zbc_in_xlat(struct ata_queued_cmd *qc)
                goto invalid_param_len;
        }
        sect = n_block / 512;
-       options = cdb[14];
+       options = cdb[14] & 0xbf;
 
        if (ata_ncq_enabled(qc->dev) &&
            ata_fpdma_zac_mgmt_in_supported(qc->dev)) {
@@ -3478,7 +3478,7 @@ static unsigned int ata_scsi_zbc_in_xlat(struct ata_queued_cmd *qc)
                tf->nsect = qc->tag << 3;
                tf->feature = sect & 0xff;
                tf->hob_feature = (sect >> 8) & 0xff;
-               tf->auxiliary = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES;
+               tf->auxiliary = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES | (options << 8);
        } else {
                tf->command = ATA_CMD_ZAC_MGMT_IN;
                tf->feature = ATA_SUBCMD_ZAC_MGMT_IN_REPORT_ZONES;