On 05/26/2017 09:27 AM, Bryant G. Ly wrote:
> 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: Bryant G. Ly
> ---
> drivers/target/target_core_user.c | 40
> +++
> 1 file changed, 40 insertions(+)
>
> diff --git a/drivers/target/target_core_user.c
> b/drivers/target/target_core_user.c
> index c8c84b7..3036a57 100644
> --- a/drivers/target/target_core_user.c
> +++ b/drivers/target/target_core_user.c
> @@ -1548,6 +1548,45 @@ static ssize_t tcmu_cmd_time_out_store(struct
> config_item *item, const char *pag
> }
> 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;
> +
> + copy = kstrdup(page, GFP_KERNEL);
Cen remove the extra newline
> +
> + if (!copy)
> + return -EINVAL;
> +
> + strcpy(udev->dev_config, copy);
Missing a kree(copy);
> +
> + /* 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)
> {
> struct se_dev_attrib *da = container_of(to_config_group(item),
> @@ -1626,6 +1665,7 @@ CONFIGFS_ATTR(tcmu_, emulate_write_cache);
>
> struct configfs_attribute *tcmu_attrib_attrs[] = {
> _attr_cmd_time_out,
> + _attr_dev_path,
> _attr_dev_size,
> _attr_emulate_write_cache,
> NULL,
>