sysfs: refactor sysfs_add_file_mode_ns
authorChristoph Hellwig <hch@lst.de>
Mon, 13 Sep 2021 05:41:13 +0000 (07:41 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Sep 2021 15:02:58 +0000 (17:02 +0200)
Regroup the code so that preallocated attributes and normal attributes are
handled in clearly separate blocks.

Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20210913054121.616001-6-hch@lst.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/sysfs/file.c

index f737bd61f71bf152ef4c7c758806e1db4cabbf68..74a2a8021c8bbd3d4f7551472c991ef147587896 100644 (file)
@@ -261,7 +261,7 @@ int sysfs_add_file_mode_ns(struct kernfs_node *parent,
        struct kobject *kobj = parent->priv;
        const struct sysfs_ops *sysfs_ops = kobj->ktype->sysfs_ops;
        struct lock_class_key *key = NULL;
-       const struct kernfs_ops *ops;
+       const struct kernfs_ops *ops = NULL;
        struct kernfs_node *kn;
 
        /* every kobject with an attribute needs a ktype assigned */
@@ -270,22 +270,23 @@ int sysfs_add_file_mode_ns(struct kernfs_node *parent,
                        kobject_name(kobj)))
                return -EINVAL;
 
-       if (sysfs_ops->show && sysfs_ops->store) {
-               if (mode & SYSFS_PREALLOC)
+       if (mode & SYSFS_PREALLOC) {
+               if (sysfs_ops->show && sysfs_ops->store)
                        ops = &sysfs_prealloc_kfops_rw;
-               else
-                       ops = &sysfs_file_kfops_rw;
-       } else if (sysfs_ops->show) {
-               if (mode & SYSFS_PREALLOC)
+               else if (sysfs_ops->show)
                        ops = &sysfs_prealloc_kfops_ro;
-               else
-                       ops = &sysfs_file_kfops_ro;
-       } else if (sysfs_ops->store) {
-               if (mode & SYSFS_PREALLOC)
+               else if (sysfs_ops->store)
                        ops = &sysfs_prealloc_kfops_wo;
-               else
+       } else {
+               if (sysfs_ops->show && sysfs_ops->store)
+                       ops = &sysfs_file_kfops_rw;
+               else if (sysfs_ops->show)
+                       ops = &sysfs_file_kfops_ro;
+               else if (sysfs_ops->store)
                        ops = &sysfs_file_kfops_wo;
-       } else
+       }
+
+       if (!ops)
                ops = &sysfs_file_kfops_empty;
 
 #ifdef CONFIG_DEBUG_LOCK_ALLOC