Commit 3aec2f41 authored by Martin K. Petersen's avatar Martin K. Petersen Committed by Jens Axboe

block: Add a disk flag to block integrity profile

So far we have relied on the app tag size to determine whether a disk
has been formatted with T10 protection information or not. However, not
all target devices provide application tag storage.

Add a flag to the block integrity profile that indicates whether the
disk has been formatted with protection information.
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Reviewed-by: default avatarSagi Grimberg <sagig@dev.mellanox.co.il>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 8288f496
...@@ -53,6 +53,14 @@ Description: ...@@ -53,6 +53,14 @@ Description:
512 bytes of data. 512 bytes of data.
What: /sys/block/<disk>/integrity/device_is_integrity_capable
Date: July 2014
Contact: Martin K. Petersen <martin.petersen@oracle.com>
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/write_generate What: /sys/block/<disk>/integrity/write_generate
Date: June 2008 Date: June 2008
Contact: Martin K. Petersen <martin.petersen@oracle.com> Contact: Martin K. Petersen <martin.petersen@oracle.com>
......
...@@ -307,6 +307,12 @@ static ssize_t integrity_generate_show(struct blk_integrity *bi, char *page) ...@@ -307,6 +307,12 @@ static ssize_t integrity_generate_show(struct blk_integrity *bi, char *page)
return sprintf(page, "%d\n", (bi->flags & BLK_INTEGRITY_GENERATE) != 0); return sprintf(page, "%d\n", (bi->flags & BLK_INTEGRITY_GENERATE) != 0);
} }
static ssize_t integrity_device_show(struct blk_integrity *bi, char *page)
{
return sprintf(page, "%u\n",
(bi->flags & BLK_INTEGRITY_DEVICE_CAPABLE) != 0);
}
static struct integrity_sysfs_entry integrity_format_entry = { static struct integrity_sysfs_entry integrity_format_entry = {
.attr = { .name = "format", .mode = S_IRUGO }, .attr = { .name = "format", .mode = S_IRUGO },
.show = integrity_format_show, .show = integrity_format_show,
...@@ -329,11 +335,17 @@ static struct integrity_sysfs_entry integrity_generate_entry = { ...@@ -329,11 +335,17 @@ static struct integrity_sysfs_entry integrity_generate_entry = {
.store = integrity_generate_store, .store = integrity_generate_store,
}; };
static struct integrity_sysfs_entry integrity_device_entry = {
.attr = { .name = "device_is_integrity_capable", .mode = S_IRUGO },
.show = integrity_device_show,
};
static struct attribute *integrity_attrs[] = { static struct attribute *integrity_attrs[] = {
&integrity_format_entry.attr, &integrity_format_entry.attr,
&integrity_tag_size_entry.attr, &integrity_tag_size_entry.attr,
&integrity_verify_entry.attr, &integrity_verify_entry.attr,
&integrity_generate_entry.attr, &integrity_generate_entry.attr,
&integrity_device_entry.attr,
NULL, NULL,
}; };
......
...@@ -270,7 +270,13 @@ void sd_dif_config_host(struct scsi_disk *sdkp) ...@@ -270,7 +270,13 @@ void sd_dif_config_host(struct scsi_disk *sdkp)
"Enabling DIX %s protection\n", disk->integrity->name); "Enabling DIX %s protection\n", disk->integrity->name);
/* Signal to block layer that we support sector tagging */ /* Signal to block layer that we support sector tagging */
if (dif && type && sdkp->ATO) { if (dif && type) {
disk->integrity->flags |= BLK_INTEGRITY_DEVICE_CAPABLE;
if (!sdkp)
return;
if (type == SD_DIF_TYPE3_PROTECTION) if (type == SD_DIF_TYPE3_PROTECTION)
disk->integrity->tag_size = sizeof(u16) + sizeof(u32); disk->integrity->tag_size = sizeof(u16) + sizeof(u32);
else else
......
...@@ -1461,6 +1461,7 @@ static inline uint64_t rq_io_start_time_ns(struct request *req) ...@@ -1461,6 +1461,7 @@ static inline uint64_t rq_io_start_time_ns(struct request *req)
enum blk_integrity_flags { enum blk_integrity_flags {
BLK_INTEGRITY_VERIFY = 1 << 0, BLK_INTEGRITY_VERIFY = 1 << 0,
BLK_INTEGRITY_GENERATE = 1 << 1, BLK_INTEGRITY_GENERATE = 1 << 1,
BLK_INTEGRITY_DEVICE_CAPABLE = 1 << 2,
}; };
struct blk_integrity_iter { struct blk_integrity_iter {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment