Commit ee018252 authored by Bryant G. Ly's avatar Bryant G. Ly Committed by Nicholas Bellinger

tcmu: Make dev_config configurable

This allows for userspace to change the device path after
it has been created. Thus giving the user the ability to change
the path. The use case for this is to allow for virtual optical
to have media change.
Signed-off-by: default avatarBryant G. Ly <bryantly@linux.vnet.ibm.com>
Reviewed-By: default avatarMike Christie <mchristi@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 801fc54d
...@@ -1548,6 +1548,46 @@ static ssize_t tcmu_cmd_time_out_store(struct config_item *item, const char *pag ...@@ -1548,6 +1548,46 @@ static ssize_t tcmu_cmd_time_out_store(struct config_item *item, const char *pag
} }
CONFIGFS_ATTR(tcmu_, cmd_time_out); CONFIGFS_ATTR(tcmu_, cmd_time_out);
static ssize_t tcmu_dev_path_show(struct config_item *item, char *page)
{
struct se_dev_attrib *da = container_of(to_config_group(item),
struct se_dev_attrib, da_group);
struct tcmu_dev *udev = TCMU_DEV(da->da_dev);
return snprintf(page, PAGE_SIZE, "%s\n", udev->dev_config);
}
static ssize_t tcmu_dev_path_store(struct config_item *item, const char *page,
size_t count)
{
struct se_dev_attrib *da = container_of(to_config_group(item),
struct se_dev_attrib, da_group);
struct tcmu_dev *udev = TCMU_DEV(da->da_dev);
char *copy = NULL;
int ret;
copy = kstrdup(page, GFP_KERNEL);
if (!copy) {
kfree(copy);
return -EINVAL;
}
strlcpy(udev->dev_config, copy, TCMU_CONFIG_LEN);
/* Check if device has been configured before */
if (tcmu_dev_configured(udev)) {
ret = tcmu_netlink_event(TCMU_CMD_RECONFIG_DEVICE,
udev->uio_info.name,
udev->uio_info.uio_dev->minor);
if (ret) {
pr_err("Unable to reconfigure device\n");
return ret;
}
}
return count;
}
CONFIGFS_ATTR(tcmu_, dev_path);
static ssize_t tcmu_dev_size_show(struct config_item *item, char *page) static ssize_t tcmu_dev_size_show(struct config_item *item, char *page)
{ {
struct se_dev_attrib *da = container_of(to_config_group(item), struct se_dev_attrib *da = container_of(to_config_group(item),
...@@ -1626,6 +1666,7 @@ CONFIGFS_ATTR(tcmu_, emulate_write_cache); ...@@ -1626,6 +1666,7 @@ CONFIGFS_ATTR(tcmu_, emulate_write_cache);
struct configfs_attribute *tcmu_attrib_attrs[] = { struct configfs_attribute *tcmu_attrib_attrs[] = {
&tcmu_attr_cmd_time_out, &tcmu_attr_cmd_time_out,
&tcmu_attr_dev_path,
&tcmu_attr_dev_size, &tcmu_attr_dev_size,
&tcmu_attr_emulate_write_cache, &tcmu_attr_emulate_write_cache,
NULL, NULL,
......
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