Re: Setting t10_wwn.model name per lun

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2012-06-21 at 13:13 -0700, Nicholas A. Bellinger wrote:
> What I think makes more sense is to turn this into an optional device
> attribute in target_core_configfs.c that is disabled by default.
> 
> This will ensure that existing LUNs continue to function as normal, and
> allow new LUNs to (optionally) use the model alias based upon ../$DEV/
> configfs backend device name.
> 
> Care to respin a patch against target-pending/for-next that adds a
> device attribute in:
> 
>    /sys/kernel/config/target/core/$HBA/$DEV/attrib/emulate_model_alias
> 
> that accepts a '1' to enable or '0' to disable the feature..?

This patch changes LIO to use the configfs backend device name as the
model if you either change the DA_EMULATE_MODEL_ALIAS in
include/target/target_core_base.h before compiling (changes the default
behavior for all devices) or echo '1' to an individual device's
emulate_model_alias attribute (changes only that device).

diff -durN linux-3.4.1.orig/drivers/target/target_core_configfs.c linux-3.4.1/drivers/target/target_core_configfs.c
--- linux-3.4.1.orig/drivers/target/target_core_configfs.c	2012-06-01 01:18:44.000000000 -0600
+++ linux-3.4.1/drivers/target/target_core_configfs.c	2012-06-25 09:08:34.762170948 -0600
@@ -641,6 +641,9 @@
 	__CONFIGFS_EATTR_RO(_name,					\
 	target_core_dev_show_attr_##_name);
 
+DEF_DEV_ATTRIB(emulate_model_alias);
+SE_DEV_ATTR(emulate_model_alias, S_IRUGO | S_IWUSR);
+
 DEF_DEV_ATTRIB(emulate_dpo);
 SE_DEV_ATTR(emulate_dpo, S_IRUGO | S_IWUSR);
 
@@ -713,6 +716,7 @@
 CONFIGFS_EATTR_OPS(target_core_dev_attrib, se_dev_attrib, da_group);
 
 static struct configfs_attribute *target_core_dev_attrib_attrs[] = {
+	&target_core_dev_attrib_emulate_model_alias.attr, 
 	&target_core_dev_attrib_emulate_dpo.attr,
 	&target_core_dev_attrib_emulate_fua_write.attr,
 	&target_core_dev_attrib_emulate_fua_read.attr,
diff -durN linux-3.4.1.orig/drivers/target/target_core_device.c linux-3.4.1/drivers/target/target_core_device.c
--- linux-3.4.1.orig/drivers/target/target_core_device.c	2012-06-01 01:18:44.000000000 -0600
+++ linux-3.4.1/drivers/target/target_core_device.c	2012-06-25 15:49:33.715497316 -0600
@@ -848,6 +848,7 @@
 {
 	struct queue_limits *limits = &dev_limits->limits;
 
+	dev->se_sub_dev->se_dev_attrib.emulate_model_alias = DA_EMULATE_MODEL_ALIAS; 
 	dev->se_sub_dev->se_dev_attrib.emulate_dpo = DA_EMULATE_DPO;
 	dev->se_sub_dev->se_dev_attrib.emulate_fua_write = DA_EMULATE_FUA_WRITE;
 	dev->se_sub_dev->se_dev_attrib.emulate_fua_read = DA_EMULATE_FUA_READ;
@@ -945,6 +946,20 @@
 	return 0;
 }
 
+int se_dev_set_emulate_model_alias(struct se_device *dev, int flag)
+{
+	if (flag != 0 && flag != 1) {
+		pr_err("Illegal value %d\n", flag);
+		return -EINVAL;
+	}
+
+	if (flag) {
+		dev_set_t10_wwn_model_alias(dev);
+	}
+	
+	return 0;
+}
+
 int se_dev_set_emulate_dpo(struct se_device *dev, int flag)
 {
 	if (flag != 0 && flag != 1) {
@@ -1694,3 +1709,13 @@
 	kfree(su_dev);
 	core_delete_hba(hba);
 }
+
+void dev_set_t10_wwn_model_alias(struct se_device *dev)
+{
+	const char *configname;
+	configname = config_item_name(&dev->se_sub_dev->se_dev_group.cg_item);
+	if (configname != NULL) {
+	 	strncpy(&dev->se_sub_dev->t10_wwn.model[0], configname, 16);
+		dev->se_sub_dev->t10_wwn.model[15] = '\0';
+	}
+}
diff -durN linux-3.4.1.orig/drivers/target/target_core_internal.h linux-3.4.1/drivers/target/target_core_internal.h
--- linux-3.4.1.orig/drivers/target/target_core_internal.h	2012-06-01 01:18:44.000000000 -0600
+++ linux-3.4.1/drivers/target/target_core_internal.h	2012-06-25 15:49:46.386498307 -0600
@@ -40,6 +40,7 @@
 int	se_dev_set_max_unmap_block_desc_count(struct se_device *, u32);
 int	se_dev_set_unmap_granularity(struct se_device *, u32);
 int	se_dev_set_unmap_granularity_alignment(struct se_device *, u32);
+int	se_dev_set_emulate_model_alias(struct se_device *, int);
 int	se_dev_set_emulate_dpo(struct se_device *, int);
 int	se_dev_set_emulate_fua_write(struct se_device *, int);
 int	se_dev_set_emulate_fua_read(struct se_device *, int);
@@ -70,6 +71,7 @@
 		struct se_lun_acl *lacl);
 int	core_dev_setup_virtual_lun0(void);
 void	core_dev_release_virtual_lun0(void);
+void 	dev_set_t10_wwn_model_alias(struct se_device *dev);
 
 /* target_core_hba.c */
 struct se_hba *core_alloc_hba(const char *, u32, u32);
diff -durN linux-3.4.1.orig/drivers/target/target_core_transport.c linux-3.4.1/drivers/target/target_core_transport.c
--- linux-3.4.1.orig/drivers/target/target_core_transport.c	2012-06-01 01:18:44.000000000 -0600
+++ linux-3.4.1/drivers/target/target_core_transport.c	2012-06-25 15:50:06.852499040 -0600
@@ -1417,6 +1417,12 @@
 		strncpy(&dev->se_sub_dev->t10_wwn.vendor[0], "LIO-ORG", 8);
 		strncpy(&dev->se_sub_dev->t10_wwn.model[0], inquiry_prod, 16);
 		strncpy(&dev->se_sub_dev->t10_wwn.revision[0], inquiry_rev, 4);
+
+		if (dev->se_sub_dev->se_dev_attrib.emulate_model_alias) {
+			dev_set_t10_wwn_model_alias(dev);
+		}
+
+		
 	}
 	scsi_dump_inquiry(dev);
 
diff -durN linux-3.4.1.orig/include/target/target_core_base.h linux-3.4.1/include/target/target_core_base.h
--- linux-3.4.1.orig/include/target/target_core_base.h	2012-06-01 01:18:44.000000000 -0600
+++ linux-3.4.1/include/target/target_core_base.h	2012-06-25 15:26:47.497895113 -0600
@@ -88,6 +88,8 @@
 #define DA_UNMAP_GRANULARITY_ALIGNMENT_DEFAULT	0
 /* Default max transfer length */
 #define DA_FABRIC_MAX_SECTORS			8192
+/* Use a model alias based on the configfs backend device name */
+#define DA_EMULATE_MODEL_ALIAS                  0
 /* Emulation for Direct Page Out */
 #define DA_EMULATE_DPO				0
 /* Emulation for Forced Unit Access WRITEs */
@@ -715,6 +717,7 @@
 };
 
 struct se_dev_attrib {
+	int		emulate_model_alias;
 	int		emulate_dpo;
 	int		emulate_fua_write;
 	int		emulate_fua_read;

Thanks,

Tregaron Bayly

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux