History

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.

Bryant G. Ly committed 9 years ago

Commit ee018251 parent 801fc541 file · +41 −0Browse files

Unified · Split

drivers/target/target_core_user.c+41−0
@@ -1548,6 +1548,46 @@ static ssize_t tcmu_cmd_time_out_store(struct config_item *item, const char *pag · 1547 unmodified lines
15481548 }
15491549 CONFIGFS_ATTR(tcmu_, cmd_time_out);
15501550
1551+static ssize_t tcmu_dev_path_show(struct config_item *item, char *page)
1552+{
1553+ struct se_dev_attrib *da = container_of(to_config_group(item),
1554+ struct se_dev_attrib, da_group);
1555+ struct tcmu_dev *udev = TCMU_DEV(da->da_dev);
1556+
1557+ return snprintf(page, PAGE_SIZE, "%s\n", udev->dev_config);
1558+}
1559+
1560+static ssize_t tcmu_dev_path_store(struct config_item *item, const char *page,
1561+ size_t count)
1562+{
1563+ struct se_dev_attrib *da = container_of(to_config_group(item),
1564+ struct se_dev_attrib, da_group);
1565+ struct tcmu_dev *udev = TCMU_DEV(da->da_dev);
1566+ char *copy = NULL;
1567+ int ret;
1568+
1569+ copy = kstrdup(page, GFP_KERNEL);
1570+ if (!copy) {
1571+ kfree(copy);
1572+ return -EINVAL;
1573+ }
1574+ strlcpy(udev->dev_config, copy, TCMU_CONFIG_LEN);
1575+
1576+ /* Check if device has been configured before */
1577+ if (tcmu_dev_configured(udev)) {
1578+ ret = tcmu_netlink_event(TCMU_CMD_RECONFIG_DEVICE,
1579+ udev->uio_info.name,
1580+ udev->uio_info.uio_dev->minor);
1581+ if (ret) {
1582+ pr_err("Unable to reconfigure device\n");
1583+ return ret;
1584+ }
1585+ }
1586+
1587+ return count;
1588+}
1589+CONFIGFS_ATTR(tcmu_, dev_path);
1590+
15511591 static ssize_t tcmu_dev_size_show(struct config_item *item, char *page)
15521592 {
15531593 struct se_dev_attrib *da = container_of(to_config_group(item),
@@ -1626,6 +1666,7 @@ CONFIGFS_ATTR(tcmu_, emulate_write_cache); · 72 unmodified lines
16261666
16271667 struct configfs_attribute *tcmu_attrib_attrs[] = {
16281668 &tcmu_attr_cmd_time_out,
1669+ &tcmu_attr_dev_path,
16291670 &tcmu_attr_dev_size,
16301671 &tcmu_attr_emulate_write_cache,
16311672 NULL,