]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
target core: add device action configfs files
authorMike Christie <mchristi@redhat.com>
Tue, 19 Dec 2017 10:03:57 +0000 (04:03 -0600)
committerNicholas Bellinger <nab@linux-iscsi.org>
Wed, 17 Jan 2018 02:05:04 +0000 (18:05 -0800)
This patch adds a new group of files that are to be used to
have the kernel module execution some action. The next patch
will have target_core_user use the group/files to be able to block
a device and to reset its memory buffer used to pass commands
between user/kernel space.

This type of file is different from the existing device attributes
in that they may be write only and when written to they result in
the kernel module executing some function. These need to be
separate from the normal device attributes which get/set device
values so userspace can continue to loop over all the attribs and
get/set them during initialization.

Signed-off-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_configfs.c
drivers/target/target_core_internal.h
include/target/target_core_backend.h
include/target/target_core_base.h

index 72b1cd1bf9d9fdcfc64084f0177df66230e77450..3f4bf126eed066771e72237dd530abf2fe67b45f 100644 (file)
@@ -1197,6 +1197,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_action, NULL, NULL);
 
 /* End functions for struct config_item_type tb_dev_attrib_cit */
 
@@ -2940,6 +2941,10 @@ static struct config_group *target_core_make_subdev(
 
        config_group_init_type_name(&dev->dev_group, name, &tb->tb_dev_cit);
 
+       config_group_init_type_name(&dev->dev_action_group, "action",
+                       &tb->tb_dev_action_cit);
+       configfs_add_default_group(&dev->dev_action_group, &dev->dev_group);
+
        config_group_init_type_name(&dev->dev_attrib.da_group, "attrib",
                        &tb->tb_dev_attrib_cit);
        configfs_add_default_group(&dev->dev_attrib.da_group, &dev->dev_group);
@@ -3200,6 +3205,7 @@ static const struct config_item_type target_core_cit = {
 void target_setup_backend_cits(struct target_backend *tb)
 {
        target_core_setup_dev_cit(tb);
+       target_core_setup_dev_action_cit(tb);
        target_core_setup_dev_attrib_cit(tb);
        target_core_setup_dev_pr_cit(tb);
        target_core_setup_dev_wwn_cit(tb);
index 6d53d9fcb883b7c1089da6f17db49ef3a0184170..1d5afc3ae017cfbae8519fcb43a884885b617da1 100644 (file)
@@ -17,6 +17,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_action_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;
index b6b3fb444a9204b6096fdd07d452c07f4d01ff3c..34a15d59ed887e944dfe38fe302d808e544a9c54 100644 (file)
@@ -53,6 +53,7 @@ struct target_backend_ops {
        void (*free_prot)(struct se_device *);
 
        struct configfs_attribute **tb_dev_attrib_attrs;
+       struct configfs_attribute **tb_dev_action_attrs;
 };
 
 struct sbc_ops {
index 00482f903decba073d5837af821bd5d724a8b3d0..9f9f5902af386b2f7efdebe079e1ef2d226968da 100644 (file)
@@ -809,6 +809,7 @@ struct se_device {
        /* T10 SPC-2 + SPC-3 Reservations */
        struct t10_reservation  t10_pr;
        struct se_dev_attrib    dev_attrib;
+       struct config_group     dev_action_group;
        struct config_group     dev_group;
        struct config_group     dev_pr_group;
        struct se_dev_stat_grps dev_stat_grps;