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