target: export lio pgr/alua support as device attr
authorMike Christie <mchristi@redhat.com>
Mon, 10 Jul 2017 19:53:31 +0000 (14:53 -0500)
committerNicholas Bellinger <nab@linux-iscsi.org>
Tue, 11 Jul 2017 03:05:27 +0000 (20:05 -0700)
Older kernels could crash or hang if the user write/read some ALUA files
with pscsi and tcmu backends. This patch exports if LIO supports
executing PGR and ALUA scsi commands/checks for the se_device, so userspace
can easily test.

Signed-off-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_configfs.c

index 9b8abd55c21cc7f243eb634ae980700a061451d0..7e87d952bb7af1a2cfc95b928d8c1cae7aa68192 100644 (file)
@@ -1085,6 +1085,24 @@ static ssize_t block_size_store(struct config_item *item,
        return count;
 }
 
+static ssize_t alua_support_show(struct config_item *item, char *page)
+{
+       struct se_dev_attrib *da = to_attrib(item);
+       u8 flags = da->da_dev->transport->transport_flags;
+
+       return snprintf(page, PAGE_SIZE, "%d\n",
+                       flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA ? 0 : 1);
+}
+
+static ssize_t pgr_support_show(struct config_item *item, char *page)
+{
+       struct se_dev_attrib *da = to_attrib(item);
+       u8 flags = da->da_dev->transport->transport_flags;
+
+       return snprintf(page, PAGE_SIZE, "%d\n",
+                       flags & TRANSPORT_FLAG_PASSTHROUGH_PGR ? 0 : 1);
+}
+
 CONFIGFS_ATTR(, emulate_model_alias);
 CONFIGFS_ATTR(, emulate_dpo);
 CONFIGFS_ATTR(, emulate_fua_write);
@@ -1116,6 +1134,8 @@ CONFIGFS_ATTR(, unmap_granularity);
 CONFIGFS_ATTR(, unmap_granularity_alignment);
 CONFIGFS_ATTR(, unmap_zeroes_data);
 CONFIGFS_ATTR(, max_write_same_len);
+CONFIGFS_ATTR_RO(, alua_support);
+CONFIGFS_ATTR_RO(, pgr_support);
 
 /*
  * dev_attrib attributes for devices using the target core SBC/SPC
@@ -1154,6 +1174,8 @@ struct configfs_attribute *sbc_attrib_attrs[] = {
        &attr_unmap_granularity_alignment,
        &attr_unmap_zeroes_data,
        &attr_max_write_same_len,
+       &attr_alua_support,
+       &attr_pgr_support,
        NULL,
 };
 EXPORT_SYMBOL(sbc_attrib_attrs);
@@ -1168,6 +1190,8 @@ struct configfs_attribute *passthrough_attrib_attrs[] = {
        &attr_hw_block_size,
        &attr_hw_max_sectors,
        &attr_hw_queue_depth,
+       &attr_alua_support,
+       &attr_pgr_support,
        NULL,
 };
 EXPORT_SYMBOL(passthrough_attrib_attrs);