[Devel] [PATCH RHEL7 COMMIT] ms/libata-scsi: Update SATL for ZAC drives
Konstantin Khorenko
khorenko at virtuozzo.com
Tue Oct 1 17:49:55 MSK 2019
The commit is pushed to "branch-rh7-3.10.0-957.27.2.vz7.107.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-957.27.2.vz7.107.11
------>
commit cf5d040cb5339c7aee05e38bc95c06f1a90831c0
Author: Hannes Reinecke <hare at suse.de>
Date: Tue Oct 1 17:49:52 2019 +0300
ms/libata-scsi: Update SATL for ZAC drives
ZAC (zoned-access command) drives translate into ZBC (Zoned block
command) device type for SCSI. So implement the correct mappings
into libata-scsi and update the SCSI command set versions.
Acked-by: Christoph Hellwig <hch at lst.de>
Acked-by: Tejun Heo <tj at kernel.org>
Signed-off-by: Hannes Reinecke <hare at suse.de>
Signed-off-by: Tejun Heo <tj at kernel.org>
https://pmc.acronis.com/browse/VSTOR-26930
(cherry picked from commit f9ca5ab832e7ac5bc2b6fe0e82ad46d536f436f9)
Signed-off-by: Ildar Ismagilov <ildar.ismagilov at virtuozzo.com>
=====================
Patchset description:
Add support of SMR ATA disk
This patchset adds support of SMR ATA disk through SCSI generic interface
aka /dev/sgX.
The SCSI generic interface is used by libzbc library for communicate
with SMR disk. These patches allow us to use SMR disk through
"ata" backend of libzbc ("scsi" and "block" backends aren't supported).
These patches were tested with following command:
libzbc/test/zbc_test.sh /dev/sgX
JIRA: https://pmc.acronis.com/browse/VSTOR-26930
Damien Le Moal (1):
libata: Fix ATA request sense
Hannes Reinecke (5):
libata: Implement ATA_DEV_ZAC
libata-scsi: Update SATL for ZAC drives
libata: Implement NCQ autosense
libata: Implement support for sense data reporting
libata: fixup ZAC device disabling
---
drivers/ata/libata-scsi.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index 1b89f3a4fda6..8d907c11c3c9 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -53,6 +53,7 @@
#include "libata.h"
#include "libata-transport.h"
+#include "../scsi/smartpqi/smartpqi.h"
#define ATA_SCSI_RBUF_SIZE 4096
@@ -1981,6 +1982,7 @@ static void ata_scsi_rbuf_fill(struct ata_scsi_args *args,
static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
{
const u8 versions[] = {
+ 0x00,
0x60, /* SAM-3 (no version claimed) */
0x03,
@@ -1989,6 +1991,20 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
0x02,
0x60 /* SPC-3 (no version claimed) */
};
+ const u8 versions_zbc[] = {
+ 0x00,
+ 0xA0, /* SAM-5 (no version claimed) */
+
+ 0x04,
+ 0xC0, /* SBC-3 (no version claimed) */
+
+ 0x04,
+ 0x60, /* SPC-4 (no version claimed) */
+
+ 0x60,
+ 0x20, /* ZBC (no version claimed) */
+ };
+
u8 hdr[] = {
TYPE_DISK,
0,
@@ -2006,6 +2022,11 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
(args->dev->link->ap->pflags & ATA_PFLAG_EXTERNAL))
hdr[1] |= (1 << 7);
+ if (args->dev->class == ATA_DEV_ZAC) {
+ hdr[0] = TYPE_ZBC;
+ hdr[2] = 0x6; /* ZBC is defined in SPC-4 */
+ }
+
memcpy(rbuf, hdr, sizeof(hdr));
memcpy(&rbuf[8], "ATA ", 8);
ata_id_string(args->id, &rbuf[16], ATA_ID_PROD, 16);
@@ -2018,7 +2039,10 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
if (rbuf[32] == 0 || rbuf[32] == ' ')
memcpy(&rbuf[32], "n/a ", 4);
- memcpy(rbuf + 59, versions, sizeof(versions));
+ if (args->dev->class == ATA_DEV_ZAC)
+ memcpy(rbuf + 58, versions_zbc, sizeof(versions_zbc));
+ else
+ memcpy(rbuf + 58, versions, sizeof(versions));
return 0;
}
More information about the Devel
mailing list