[RHEL7,COMMIT] target: move blkio_cgroup from attrib/ to param/

Submitted by Konstantin Khorenko on June 25, 2018, 4:19 p.m.

Details

Message ID 201806251619.w5PGJsit012132@finist_ce7.work
State New
Series "target: move blkio_cgroup from attrib/ to param/"
Headers show

Commit Message

Konstantin Khorenko June 25, 2018, 4:19 p.m.
The commit is pushed to "branch-rh7-3.10.0-862.3.2.vz7.61.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-862.3.2.vz7.61.4
------>
commit 56be12973426eae23fc29ad7133d058f0a002ea6
Author: Andrei Vagin <avagin@openvz.org>
Date:   Mon Jun 25 19:19:54 2018 +0300

    target: move blkio_cgroup from attrib/ to param/
    
    targetcli expects to get only number values for attrib/*,
    all non-number attributes should be in param/
    
    For example:
    /sys/kernel/config/target/core/iblock_0/test/param/blkio_cgroup
    
    https://pmc.acronis.com/browse/VSTOR-10194
    
    Signed-off-by: Andrei Vagin <avagin@openvz.org>
---
 drivers/target/target_core_configfs.c | 39 +++++++++++++++++++++++++----------
 drivers/target/target_core_device.c   | 13 +++++++-----
 drivers/target/target_core_iblock.c   |  7 ++++---
 drivers/target/target_core_internal.h |  1 +
 include/target/target_core_backend.h  |  2 ++
 include/target/target_core_base.h     |  8 ++++++-
 6 files changed, 50 insertions(+), 20 deletions(-)

Patch hide | download patch | download mbox

diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c
index 2cbe2184a90c..a5a66ce16c39 100644
--- a/drivers/target/target_core_configfs.c
+++ b/drivers/target/target_core_configfs.c
@@ -454,6 +454,12 @@  static inline struct se_dev_attrib *to_attrib(struct config_item *item)
 			da_group);
 }
 
+static inline struct se_dev_param *to_param(struct config_item *item)
+{
+	return container_of(to_config_group(item), struct se_dev_param,
+			da_group);
+}
+
 /* Start functions for struct config_item_type tb_dev_attrib_cit */
 #define DEF_CONFIGFS_ATTRIB_SHOW(_name)					\
 static ssize_t _name##_show(struct config_item *item, char *page)	\
@@ -997,13 +1003,14 @@  static ssize_t block_size_store(struct config_item *item,
 
 static ssize_t blkio_cgroup_show(struct config_item *item, char *page)
 {
-	struct se_dev_attrib *da = to_attrib(item);
+	struct se_dev_param *da = to_param(item);
 	struct se_device *dev = da->da_dev;
 	int rb;
 
-	read_lock(&dev->dev_attrib_lock);
-	if (dev->dev_attrib.blk_css) {
-		rb = cgroup_path(dev->dev_attrib.blk_css->cgroup,
+	printk("%s:%d: %p\n", __func__, __LINE__, dev);
+	read_lock(&dev->dev_param_lock);
+	if (dev->dev_param.blk_css) {
+		rb = cgroup_path(dev->dev_param.blk_css->cgroup,
 				page, PAGE_SIZE - 1);
 		if (rb < 0)
 			goto out;
@@ -1015,7 +1022,7 @@  static ssize_t blkio_cgroup_show(struct config_item *item, char *page)
 	} else
 		rb = 0;
 out:
-	read_unlock(&dev->dev_attrib_lock);
+	read_unlock(&dev->dev_param_lock);
 
 	return rb;
 }
@@ -1023,7 +1030,7 @@  static ssize_t blkio_cgroup_show(struct config_item *item, char *page)
 static ssize_t blkio_cgroup_store(struct config_item *item,
 		const char *page, size_t count)
 {
-	struct se_dev_attrib *da = to_attrib(item);
+	struct se_dev_param *da = to_param(item);
 	struct se_device *dev = da->da_dev;
 	struct cgroup_subsys_state *css, *pcss;
 	int ret;
@@ -1040,10 +1047,10 @@  static ssize_t blkio_cgroup_store(struct config_item *item,
 	else
 		css = NULL;
 
-	write_lock(&dev->dev_attrib_lock);
-	pcss = dev->dev_attrib.blk_css;
-	dev->dev_attrib.blk_css = css;
-	write_unlock(&dev->dev_attrib_lock);
+	write_lock(&dev->dev_param_lock);
+	pcss = dev->dev_param.blk_css;
+	dev->dev_param.blk_css = css;
+	write_unlock(&dev->dev_param_lock);
 
 	if (pcss)
 		css_put(pcss);
@@ -1139,13 +1146,17 @@  struct configfs_attribute *sbc_attrib_attrs[] = {
 	&attr_unmap_granularity_alignment,
 	&attr_unmap_zeroes_data,
 	&attr_max_write_same_len,
-	&attr_blkio_cgroup,
 	&attr_alua_support,
 	&attr_pgr_support,
 	NULL,
 };
 EXPORT_SYMBOL(sbc_attrib_attrs);
 
+struct configfs_attribute *sbc_param_attrs[] = {
+	&attr_blkio_cgroup,
+	NULL,
+};
+EXPORT_SYMBOL(sbc_param_attrs);
 /*
  * Minimal dev_attrib attributes for devices passing through CDBs.
  * In this case we only provide a few read-only attributes for
@@ -1163,6 +1174,7 @@  struct configfs_attribute *passthrough_attrib_attrs[] = {
 EXPORT_SYMBOL(passthrough_attrib_attrs);
 
 TB_CIT_SETUP_DRV(dev_attrib, NULL, NULL);
+TB_CIT_SETUP_DRV(dev_param, NULL, NULL);
 
 /* End functions for struct config_item_type tb_dev_attrib_cit */
 
@@ -2923,6 +2935,10 @@  static struct config_group *target_core_make_subdev(
 			&tb->tb_dev_attrib_cit);
 	configfs_add_default_group(&dev->dev_attrib.da_group, &dev->dev_group);
 
+	config_group_init_type_name(&dev->dev_param.da_group, "param",
+			&tb->tb_dev_param_cit);
+	configfs_add_default_group(&dev->dev_param.da_group, &dev->dev_group);
+
 	config_group_init_type_name(&dev->dev_pr_group, "pr",
 			&tb->tb_dev_pr_cit);
 	configfs_add_default_group(&dev->dev_pr_group, &dev->dev_group);
@@ -3180,6 +3196,7 @@  void target_setup_backend_cits(struct target_backend *tb)
 {
 	target_core_setup_dev_cit(tb);
 	target_core_setup_dev_attrib_cit(tb);
+	target_core_setup_dev_param_cit(tb);
 	target_core_setup_dev_pr_cit(tb);
 	target_core_setup_dev_wwn_cit(tb);
 	target_core_setup_dev_alua_tg_pt_gps_cit(tb);
diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
index 28096d73b7ca..acafcb69a8bb 100644
--- a/drivers/target/target_core_device.c
+++ b/drivers/target/target_core_device.c
@@ -758,7 +758,7 @@  struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
 	INIT_LIST_HEAD(&dev->state_list);
 	INIT_LIST_HEAD(&dev->qf_cmd_list);
 	INIT_LIST_HEAD(&dev->g_dev_node);
-	rwlock_init(&dev->dev_attrib_lock);
+	rwlock_init(&dev->dev_param_lock);
 	spin_lock_init(&dev->execute_task_lock);
 	spin_lock_init(&dev->delayed_cmd_lock);
 	spin_lock_init(&dev->dev_reservation_lock);
@@ -806,7 +806,10 @@  struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
 	dev->dev_attrib.unmap_zeroes_data =
 				DA_UNMAP_ZEROES_DATA_DEFAULT;
 	dev->dev_attrib.max_write_same_len = DA_MAX_WRITE_SAME_LEN;
-	dev->dev_attrib.blk_css = NULL;
+
+	dev->dev_param.da_dev = dev;
+	dev->dev_param.blk_css = NULL;
+	printk("%s:%d: %p\n", __func__, __LINE__, dev);
 
 	xcopy_lun = &dev->xcopy_lun;
 	rcu_assign_pointer(xcopy_lun->lun_se_dev, dev);
@@ -980,9 +983,9 @@  void target_free_device(struct se_device *dev)
 	if (dev->transport->free_prot)
 		dev->transport->free_prot(dev);
 
-	if (dev->dev_attrib.blk_css)
-		css_put(dev->dev_attrib.blk_css);
-	dev->dev_attrib.blk_css = NULL;
+	if (dev->dev_param.blk_css)
+		css_put(dev->dev_param.blk_css);
+	dev->dev_param.blk_css = NULL;
 
 	dev->transport->free_device(dev);
 }
diff --git a/drivers/target/target_core_iblock.c b/drivers/target/target_core_iblock.c
index 266375ade594..e7042217cc9b 100644
--- a/drivers/target/target_core_iblock.c
+++ b/drivers/target/target_core_iblock.c
@@ -727,11 +727,11 @@  iblock_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
 		return 0;
 	}
 
-	read_lock(&dev->dev_attrib_lock);
-	blk_css = dev->dev_attrib.blk_css;
+	read_lock(&dev->dev_param_lock);
+	blk_css = dev->dev_param.blk_css;
 	if (blk_css)
 		css_get(blk_css);
-	read_unlock(&dev->dev_attrib_lock);
+	read_unlock(&dev->dev_param_lock);
 
 	bio = iblock_get_bio(cmd, block_lba, sgl_nents);
 	if (!bio)
@@ -891,6 +891,7 @@  static const struct target_backend_ops iblock_ops = {
 	.get_io_opt		= iblock_get_io_opt,
 	.get_write_cache	= iblock_get_write_cache,
 	.tb_dev_attrib_attrs	= sbc_attrib_attrs,
+	.tb_dev_param_attrs	= sbc_param_attrs,
 };
 
 static int __init iblock_module_init(void)
diff --git a/drivers/target/target_core_internal.h b/drivers/target/target_core_internal.h
index 86b4a8375628..bf4b11d78520 100644
--- a/drivers/target/target_core_internal.h
+++ b/drivers/target/target_core_internal.h
@@ -11,6 +11,7 @@  struct target_backend {
 
 	struct config_item_type tb_dev_cit;
 	struct config_item_type tb_dev_attrib_cit;
+	struct config_item_type tb_dev_param_cit;
 	struct config_item_type tb_dev_pr_cit;
 	struct config_item_type tb_dev_wwn_cit;
 	struct config_item_type tb_dev_alua_tg_pt_gps_cit;
diff --git a/include/target/target_core_backend.h b/include/target/target_core_backend.h
index 90f4863d5b88..839a8dddb684 100644
--- a/include/target/target_core_backend.h
+++ b/include/target/target_core_backend.h
@@ -49,6 +49,7 @@  struct target_backend_ops {
 	void (*free_prot)(struct se_device *);
 
 	struct configfs_attribute **tb_dev_attrib_attrs;
+	struct configfs_attribute **tb_dev_param_attrs;
 };
 
 struct sbc_ops {
@@ -88,6 +89,7 @@  int	transport_set_vpd_ident_type(struct t10_vpd *, unsigned char *);
 int	transport_set_vpd_ident(struct t10_vpd *, unsigned char *);
 
 extern struct configfs_attribute *sbc_attrib_attrs[];
+extern struct configfs_attribute *sbc_param_attrs[];
 extern struct configfs_attribute *passthrough_attrib_attrs[];
 
 /* core helpers also used by command snooping in pscsi */
diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
index 047b75eea1f1..a1ff534c6976 100644
--- a/include/target/target_core_base.h
+++ b/include/target/target_core_base.h
@@ -696,7 +696,12 @@  struct se_dev_attrib {
 	u32		max_bytes_per_io;
 	struct se_device *da_dev;
 	struct config_group da_group;
+};
+
+struct se_dev_param {
 	struct cgroup_subsys_state *blk_css;
+	struct se_device *da_dev;
+	struct config_group da_group;
 };
 
 struct se_port_stat_grps {
@@ -809,7 +814,7 @@  struct se_device {
 	atomic_t		dev_ordered_sync;
 	atomic_t		dev_qf_count;
 	u32			export_count;
-	rwlock_t		dev_attrib_lock;
+	rwlock_t		dev_param_lock;
 	spinlock_t		delayed_cmd_lock;
 	spinlock_t		execute_task_lock;
 	spinlock_t		dev_reservation_lock;
@@ -843,6 +848,7 @@  struct se_device {
 	/* T10 SPC-2 + SPC-3 Reservations */
 	struct t10_reservation	t10_pr;
 	struct se_dev_attrib	dev_attrib;
+	struct se_dev_param	dev_param;
 	struct config_group	dev_group;
 	struct config_group	dev_pr_group;
 	struct se_dev_stat_grps dev_stat_grps;