diff options
author | Christian Brauner <brauner@kernel.org> | 2024-12-13 00:03:42 +0100 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-01-09 16:58:52 +0100 |
commit | 5dcbd85d35515532c93b337a3f8be54937aeea8a (patch) | |
tree | 2406e976afa4078deee0f5c2b92ca5660927c4b7 /fs/mount.h | |
parent | 144acef3334eb664fae4a2e1e35fdd693fc07d4e (diff) |
fs: lockless mntns rbtree lookup
Currently we use a read-write lock but for the simple search case we can
make this lockless. Creating a new mount namespace is a rather rare
event compared with querying mounts in a foreign mount namespace. Once
this is picked up by e.g., systemd to list mounts in another mount in
it's isolated services or in containers this will be used a lot so this
seems worthwhile doing.
Link: https://lore.kernel.org/r/20241213-work-mount-rbtree-lockless-v3-3-6e3cdaf9b280@kernel.org
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'fs/mount.h')
-rw-r--r-- | fs/mount.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/mount.h b/fs/mount.h index 179f690a0c72..bd8d6c36b421 100644 --- a/fs/mount.h +++ b/fs/mount.h @@ -12,7 +12,10 @@ struct mnt_namespace { struct user_namespace *user_ns; struct ucounts *ucounts; u64 seq; /* Sequence number to prevent loops */ - wait_queue_head_t poll; + union { + wait_queue_head_t poll; + struct rcu_head mnt_ns_rcu; + }; u64 event; unsigned int nr_mounts; /* # of mounts in the namespace */ unsigned int pending_mounts; |