All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v7 0/6] kernfs: Use RCU to access kernfs_node::{parent|name}.
@ 2025-02-03 13:50 Sebastian Andrzej Siewior
  2025-02-03 13:50 ` [PATCH v7 1/6] kernfs: Acquire kernfs_rwsem in kernfs_notify_workfn() Sebastian Andrzej Siewior
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Sebastian Andrzej Siewior @ 2025-02-03 13:50 UTC (permalink / raw)
  To: cgroups, linux-kernel
  Cc: Michal Koutný, Paul E. McKenney, Boqun Feng,
	Greg Kroah-Hartman, Hillf Danton, Johannes Weiner, Marco Elver,
	Tejun Heo, tglx, Sebastian Andrzej Siewior

Hi,

This started as a bug report by Hillf Danton and aims to access
kernfs_node::{name|parent} with RCU to avoid the lock during
kernfs_path_from_node().

I've split the individual fixes in separate patches (#1 to #4). I've
also split the ::parent and ::name RCU conversation into a single patch
(#5 and #6).

v6…v7 https://lore.kernel.org/all/20250130140207.1914339-1-bigeasy@linutronix.de/
  - Rebase on v6.14-rc1

v5…v6 https://lore.kernel.org/all/20250128084226.1499291-1-bigeasy@linutronix.de/
  - s/rdt_kn_get_name/rdt_kn_name/
  - s/rdt_get_kn_parent_priv/rdt_kn_parent_priv/
  - s/kn_get_priv/kn_priv/
  - The comment, that has been removed in kernfs_put(), is back.
  - Using rcu_access_pointer() in kernfs_activate_one() and kernfs_dir_pos()
    instead of kernfs_parent() where the pointer is not dereferenced but
    just compared.

v4…v5 https://lore.kernel.org/all/20250124174614.866884-1-bigeasy@linutronix.de/
  - rdtgroup:
    - Add a comment to rdt_get_kn_parent_priv() regarding lifetime of
      parent.
    - Move individual rcu_dereference_check() invocations into
      rdt_kn_parent() with a comment on lifetime.
    - Use rcu_access_pointer() in kernfs_to_rdtgroup() instead
      rcu_dereference_check(, true)
  - s/kernfs_rcu_get_name/kernfs_rcu_name/
  - Move all rcu_dereference_check() within kernfs into kernfs_parent()
    and extend its checks to have all cases in one spot. Document why
    each case makes sense.
  - kernfs_notify_workfn(): Do unlocks in the reverse order of locks.
  - Add kernfs_root_flags() and use it in cgroup's kn_get_priv() to
    check the right KERNFS_ROOT_INVARIANT_PARENT flag.

v3: https://lore.kernel.org/all/20241121175250.EJbI7VMb@linutronix.de/
v2: https://lore.kernel.org/all/20241112155713.269214-1-bigeasy@linutronix.de/
v1: https://lore.kernel.org/all/20241108222406.n5azgO98@linutronix.de/


Sebastian

Sebastian Andrzej Siewior (6):
  kernfs: Acquire kernfs_rwsem in kernfs_notify_workfn().
  kernfs: Acquire kernfs_rwsem in kernfs_get_parent_dentry().
  kernfs: Acquire kernfs_rwsem in kernfs_node_dentry().
  kernfs: Don't re-lock kernfs_root::kernfs_rwsem in
    kernfs_fop_readdir().
  kernfs: Use RCU to access kernfs_node::parent.
  kernfs: Use RCU to access kernfs_node::name.

 arch/x86/kernel/cpu/resctrl/internal.h    |   5 +
 arch/x86/kernel/cpu/resctrl/pseudo_lock.c |  14 +-
 arch/x86/kernel/cpu/resctrl/rdtgroup.c    |  73 +++++---
 fs/kernfs/dir.c                           | 211 +++++++++++++---------
 fs/kernfs/file.c                          |   6 +-
 fs/kernfs/kernfs-internal.h               |  37 +++-
 fs/kernfs/mount.c                         |  21 ++-
 fs/kernfs/symlink.c                       |  30 +--
 fs/sysfs/dir.c                            |   2 +-
 fs/sysfs/file.c                           |  24 ++-
 include/linux/kernfs.h                    |  14 +-
 kernel/cgroup/cgroup-v1.c                 |   2 +-
 kernel/cgroup/cgroup.c                    |  24 ++-
 security/selinux/hooks.c                  |   7 +-
 14 files changed, 307 insertions(+), 163 deletions(-)

-- 
2.47.2


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2025-02-11  7:57 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-03 13:50 [PATCH v7 0/6] kernfs: Use RCU to access kernfs_node::{parent|name} Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 1/6] kernfs: Acquire kernfs_rwsem in kernfs_notify_workfn() Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 2/6] kernfs: Acquire kernfs_rwsem in kernfs_get_parent_dentry() Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 3/6] kernfs: Acquire kernfs_rwsem in kernfs_node_dentry() Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 4/6] kernfs: Don't re-lock kernfs_root::kernfs_rwsem in kernfs_fop_readdir() Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 5/6] kernfs: Use RCU to access kernfs_node::parent Sebastian Andrzej Siewior
2025-02-10  8:43   ` Sebastian Andrzej Siewior
2025-02-10 16:41     ` Yonghong Song
2025-02-11  7:56       ` Sebastian Andrzej Siewior
2025-02-03 13:50 ` [PATCH v7 6/6] kernfs: Use RCU to access kernfs_node::name Sebastian Andrzej Siewior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.