diff mbox series

sd: Add zoned capabilities device attribute

Message ID 20200515054856.1408575-1-damien.lemoal@wdc.com (mailing list archive)
State Mainlined
Commit c5f8852273dd7df45d3fe12cf0e2ec68cacfad80
Headers show
Series sd: Add zoned capabilities device attribute | expand

Commit Message

Damien Le Moal May 15, 2020, 5:48 a.m. UTC
Export through sysfs as a scsi_disk attribute the zoned capabilities of
a disk ("zoned_cap" attribute file). This new attribute indicates in
human readable form (i.e. a string) the zoned block capabilities
implemented by the disk as found in the ZONED field of the disk block
device characteristics VPD page. The possible values are:
- "none": ZONED=00b (not reported), regular disk
- "host-aware": ZONED=01b, host-aware ZBC disk
- "drive-managed": ZONED=10b, drive-managed ZBC disk (regular disk
  interface)

For completness, also add the following value which is detected using
the device type rather than the ZONED field:
- "host-managed": device type = 0x14 (TYPE_ZBC), host-managed ZBC disk

This new sysfs attribute is purely informational and complementary to
the "zoned" device request queue sysfs attribute as it allows
applications and user daemons (e.g.  udev) to easily differentiate
regular disks from drive-managed SMR disks without the need for direct
access tools such as provided by sg3utils.

Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
---
 drivers/scsi/sd.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

Comments

Johannes Thumshirn May 15, 2020, 9:10 a.m. UTC | #1
Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Martin K. Petersen May 20, 2020, 2:30 a.m. UTC | #2
On Fri, 15 May 2020 14:48:56 +0900, Damien Le Moal wrote:

> Export through sysfs as a scsi_disk attribute the zoned capabilities of
> a disk ("zoned_cap" attribute file). This new attribute indicates in
> human readable form (i.e. a string) the zoned block capabilities
> implemented by the disk as found in the ZONED field of the disk block
> device characteristics VPD page. The possible values are:
> - "none": ZONED=00b (not reported), regular disk
> - "host-aware": ZONED=01b, host-aware ZBC disk
> - "drive-managed": ZONED=10b, drive-managed ZBC disk (regular disk
>   interface)
> 
> [...]

Applied to 5.8/scsi-queue, thanks!

[1/1] scsi: sd: Add zoned capabilities device attribute
      https://git.kernel.org/mkp/scsi/c/c5f8852273dd
diff mbox series

Patch

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 8929e178c6f8..1bc2a061efa9 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -528,6 +528,21 @@  max_write_same_blocks_store(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RW(max_write_same_blocks);
 
+static ssize_t
+zoned_cap_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+	struct scsi_disk *sdkp = to_scsi_disk(dev);
+
+	if (sdkp->device->type == TYPE_ZBC)
+		return sprintf(buf, "host-managed\n");
+	if (sdkp->zoned == 1)
+		return sprintf(buf, "host-aware\n");
+	if (sdkp->zoned == 2)
+		return sprintf(buf, "drive-managed\n");
+	return sprintf(buf, "none\n");
+}
+static DEVICE_ATTR_RO(zoned_cap);
+
 static struct attribute *sd_disk_attrs[] = {
 	&dev_attr_cache_type.attr,
 	&dev_attr_FUA.attr,
@@ -541,6 +556,7 @@  static struct attribute *sd_disk_attrs[] = {
 	&dev_attr_zeroing_mode.attr,
 	&dev_attr_max_write_same_blocks.attr,
 	&dev_attr_max_medium_access_timeouts.attr,
+	&dev_attr_zoned_cap.attr,
 	NULL,
 };
 ATTRIBUTE_GROUPS(sd_disk);