block: Export integrity data interval size in sysfs
authorMartin K. Petersen <martin.petersen@oracle.com>
Wed, 21 Oct 2015 17:19:43 +0000 (13:19 -0400)
committerJens Axboe <axboe@fb.com>
Wed, 21 Oct 2015 20:42:41 +0000 (14:42 -0600)
The size of the data interval was not exported in the sysfs integrity
directory. Export it so that userland apps can tell whether the interval
is different from the device's logical block size.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Documentation/ABI/testing/sysfs-block
block/blk-integrity.c

index 8df003963d99c0500eb9a1c3ee20be367812eb36..71d184dbb70d29daabf9ad1461d12615c7d34fbf 100644 (file)
@@ -60,6 +60,13 @@ Description:
                Indicates whether a storage device is capable of storing
                integrity metadata. Set if the device is T10 PI-capable.
 
+What:          /sys/block/<disk>/integrity/protection_interval_bytes
+Date:          July 2015
+Contact:       Martin K. Petersen <martin.petersen@oracle.com>
+Description:
+               Describes the number of data bytes which are protected
+               by one integrity tuple. Typically the device's logical
+               block size.
 
 What:          /sys/block/<disk>/integrity/write_generate
 Date:          June 2008
index c7508654faffb8b7d26779a4e6a50a20ae3a7aa5..7a96f57ed1952a23d446b0939b3fb69157d0e737 100644 (file)
@@ -289,6 +289,14 @@ static ssize_t integrity_tag_size_show(struct blk_integrity *bi, char *page)
                return sprintf(page, "0\n");
 }
 
+static ssize_t integrity_interval_show(struct blk_integrity *bi, char *page)
+{
+       if (bi != NULL)
+               return sprintf(page, "%u\n", 1 << bi->interval_exp);
+       else
+               return sprintf(page, "0\n");
+}
+
 static ssize_t integrity_verify_store(struct blk_integrity *bi,
                                      const char *page, size_t count)
 {
@@ -343,6 +351,11 @@ static struct integrity_sysfs_entry integrity_tag_size_entry = {
        .show = integrity_tag_size_show,
 };
 
+static struct integrity_sysfs_entry integrity_interval_entry = {
+       .attr = { .name = "protection_interval_bytes", .mode = S_IRUGO },
+       .show = integrity_interval_show,
+};
+
 static struct integrity_sysfs_entry integrity_verify_entry = {
        .attr = { .name = "read_verify", .mode = S_IRUGO | S_IWUSR },
        .show = integrity_verify_show,
@@ -363,6 +376,7 @@ static struct integrity_sysfs_entry integrity_device_entry = {
 static struct attribute *integrity_attrs[] = {
        &integrity_format_entry.attr,
        &integrity_tag_size_entry.attr,
+       &integrity_interval_entry.attr,
        &integrity_verify_entry.attr,
        &integrity_generate_entry.attr,
        &integrity_device_entry.attr,