On Tue, 2013-01-15 at 10:06 -0800, Andy Grover wrote: > From: Tregaron Bayly <tbayly@xxxxxxxxxxxx> > > 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). > > Signed-off-by: Tregaron Bayly <tbayly@xxxxxxxxxxxx> > Signed-off-by: Andy Grover <agrover@xxxxxxxxxx> > --- So I'm willing to take this for-3.9.. Just a few minor comments below.. > drivers/target/target_core_configfs.c | 4 ++++ > drivers/target/target_core_device.c | 28 ++++++++++++++++++++++++++++ > drivers/target/target_core_internal.h | 2 ++ > include/target/target_core_base.h | 3 +++ > 4 files changed, 37 insertions(+), 0 deletions(-) > > diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c > index 4efb61b..43b7ac6 100644 > --- a/drivers/target/target_core_configfs.c > +++ b/drivers/target/target_core_configfs.c > @@ -609,6 +609,9 @@ static struct target_core_dev_attrib_attribute \ > __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); > > @@ -681,6 +684,7 @@ SE_DEV_ATTR(max_write_same_len, S_IRUGO | S_IWUSR); > 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 --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c > index e269510..735784c 100644 > --- a/drivers/target/target_core_device.c > +++ b/drivers/target/target_core_device.c > @@ -713,6 +713,20 @@ int se_dev_set_max_write_same_len( > return 0; > } > > +int se_dev_set_emulate_model_alias(struct se_device *dev, int flag) > +{ As initiators may end up going hay-wire if their MODEL string changes underneath them during active export, please add a dev->export_count check here similar to se_dev_set_block_size() et al, and fail if there are active fabric exports. > + 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) { > @@ -1384,6 +1398,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name) > dev->t10_alua.t10_dev = dev; > > dev->dev_attrib.da_dev = dev; > + dev->dev_attrib.emulate_model_alias = DA_EMULATE_MODEL_ALIAS; > dev->dev_attrib.emulate_dpo = DA_EMULATE_DPO; > dev->dev_attrib.emulate_fua_write = DA_EMULATE_FUA_WRITE; > dev->dev_attrib.emulate_fua_read = DA_EMULATE_FUA_READ; > @@ -1474,6 +1489,9 @@ int target_configure_device(struct se_device *dev) > dev->transport->inquiry_rev, 4); > } > > + if (dev->dev_attrib.emulate_model_alias) > + dev_set_t10_wwn_model_alias(dev); > + Move this up into the (transport_type != TRANSPORT_PLUGIN_PHBA_PDEV) check above, and make the else {} block set model from dev->transport->inquiry_prod[] for the default cause. > scsi_dump_inquiry(dev); > > spin_lock(&hba->device_lock); > @@ -1545,6 +1563,16 @@ out_free_hba: > return ret; > } > > +void dev_set_t10_wwn_model_alias(struct se_device *dev) > +{ > + const char *configname; > + > + configname = config_item_name(&dev->dev_group.cg_item); > + if (configname) { > + strncpy(&dev->t10_wwn.model[0], configname, 16); > + dev->t10_wwn.model[15] = '\0'; > + } > +} This should be statically defined. Please make it static and move it ahead of se_dev_set_emulate_model_alias() usage above. Also, there probably should be some pr_warn() here if the configname exceeds the 16 bytes allocated for INQUIRY MODEL. > > void core_dev_release_virtual_lun0(void) > { > diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h > index 93e9c1f..572a947 100644 > --- a/drivers/target/target_core_internal.h > +++ b/drivers/target/target_core_internal.h > @@ -25,6 +25,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_max_write_same_len(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); > @@ -57,6 +58,7 @@ void core_dev_release_virtual_lun0(void); > struct se_device *target_alloc_device(struct se_hba *hba, const char *name); > int target_configure_device(struct se_device *dev); > void target_free_device(struct se_device *); > +void dev_set_t10_wwn_model_alias(struct se_device *dev); > and drop this unnecessary function prototype. > /* target_core_hba.c */ > struct se_hba *core_alloc_hba(const char *, u32, u32); > diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h > index 02ed017..aa9743c 100644 > --- a/include/target/target_core_base.h > +++ b/include/target/target_core_base.h > @@ -75,6 +75,8 @@ > #define DA_MAX_WRITE_SAME_LEN 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 */ > @@ -590,6 +592,7 @@ struct se_dev_entry { > }; > > struct se_dev_attrib { > + int emulate_model_alias; > int emulate_dpo; > int emulate_fua_write; > int emulate_fua_read; -- 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