kernfs: Factor out kernfs_activate_one()
authorTejun Heo <tj@kernel.org>
Sun, 28 Aug 2022 05:04:38 +0000 (19:04 -1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Sep 2022 16:08:44 +0000 (18:08 +0200)
Factor out kernfs_activate_one() from kernfs_activate() and reorder
operations so that KERNFS_ACTIVATED now simply indicates whether activation
was attempted on the node ignoring whether activation took place. As the
flag doesn't have a reader, the refactoring and reordering shouldn't cause
any behavior difference.

Tested-by: Chengming Zhou <zhouchengming@bytedance.com>
Reviewed-by: Chengming Zhou <zhouchengming@bytedance.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Link: https://lore.kernel.org/r/20220828050440.734579-8-tj@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/kernfs/dir.c

index f8cbd05..c932395 100644 (file)
@@ -1305,6 +1305,21 @@ static struct kernfs_node *kernfs_next_descendant_post(struct kernfs_node *pos,
        return pos->parent;
 }
 
+static void kernfs_activate_one(struct kernfs_node *kn)
+{
+       lockdep_assert_held_write(&kernfs_root(kn)->kernfs_rwsem);
+
+       kn->flags |= KERNFS_ACTIVATED;
+
+       if (kernfs_active(kn) || (kn->flags & KERNFS_REMOVING))
+               return;
+
+       WARN_ON_ONCE(kn->parent && RB_EMPTY_NODE(&kn->rb));
+       WARN_ON_ONCE(atomic_read(&kn->active) != KN_DEACTIVATED_BIAS);
+
+       atomic_sub(KN_DEACTIVATED_BIAS, &kn->active);
+}
+
 /**
  * kernfs_activate - activate a node which started deactivated
  * @kn: kernfs_node whose subtree is to be activated
@@ -1326,16 +1341,8 @@ void kernfs_activate(struct kernfs_node *kn)
        down_write(&root->kernfs_rwsem);
 
        pos = NULL;
-       while ((pos = kernfs_next_descendant_post(pos, kn))) {
-               if (kernfs_active(pos) || (pos->flags & KERNFS_REMOVING))
-                       continue;
-
-               WARN_ON_ONCE(pos->parent && RB_EMPTY_NODE(&pos->rb));
-               WARN_ON_ONCE(atomic_read(&pos->active) != KN_DEACTIVATED_BIAS);
-
-               atomic_sub(KN_DEACTIVATED_BIAS, &pos->active);
-               pos->flags |= KERNFS_ACTIVATED;
-       }
+       while ((pos = kernfs_next_descendant_post(pos, kn)))
+               kernfs_activate_one(pos);
 
        up_write(&root->kernfs_rwsem);
 }