]> git.dujemihanovic.xyz Git - linux.git/commitdiff
Merge tag 'vfs-6.12.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 16 Sep 2024 09:15:26 +0000 (11:15 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 16 Sep 2024 09:15:26 +0000 (11:15 +0200)
Pull vfs mount updates from Christian Brauner:
 "Recently, we added the ability to list mounts in other mount
  namespaces and the ability to retrieve namespace file descriptors
  without having to go through procfs by deriving them from pidfds.

  This extends nsfs in two ways:

   (1) Add the ability to retrieve information about a mount namespace
       via NS_MNT_GET_INFO.

       This will return the mount namespace id and the number of mounts
       currently in the mount namespace. The number of mounts can be
       used to size the buffer that needs to be used for listmount() and
       is in general useful without having to actually iterate through
       all the mounts.

      The structure is extensible.

   (2) Add the ability to iterate through all mount namespaces over
       which the caller holds privilege returning the file descriptor
       for the next or previous mount namespace.

       To retrieve a mount namespace the caller must be privileged wrt
       to it's owning user namespace. This means that PID 1 on the host
       can list all mounts in all mount namespaces or that a container
       can list all mounts of its nested containers.

       Optionally pass a structure for NS_MNT_GET_INFO with
       NS_MNT_GET_{PREV,NEXT} to retrieve information about the mount
       namespace in one go.

  (1) and (2) can be implemented for other namespace types easily.

  Together with recent api additions this means one can iterate through
  all mounts in all mount namespaces without ever touching procfs.

  The commit message in 49224a345c48 ('Merge patch series "nsfs: iterate
  through mount namespaces"') contains example code how to do this"

* tag 'vfs-6.12.mount' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
  nsfs: iterate through mount namespaces
  file: add fput() cleanup helper
  fs: add put_mnt_ns() cleanup helper
  fs: allow mount namespace fd

1  2 
fs/mount.h
fs/namespace.c
include/linux/file.h
include/uapi/linux/nsfs.h

diff --cc fs/mount.h
index 0a78f85cf73703c67a02bb84ad429a779fc5ec2a,c1db0c709c6a9f706b74e8626de333243632fcf8..185fc56afc13338f8185fe818051444d540cbd5b
@@@ -153,4 -153,18 +153,17 @@@ static inline void move_from_ns(struct 
        list_add_tail(&mnt->mnt_list, dt_list);
  }
  
 -extern void mnt_cursor_del(struct mnt_namespace *ns, struct mount *cursor);
  bool has_locked_children(struct mount *mnt, struct dentry *dentry);
+ struct mnt_namespace *__lookup_next_mnt_ns(struct mnt_namespace *mnt_ns, bool previous);
+ static inline struct mnt_namespace *lookup_next_mnt_ns(struct mnt_namespace *mntns)
+ {
+       return __lookup_next_mnt_ns(mntns, false);
+ }
+ static inline struct mnt_namespace *lookup_prev_mnt_ns(struct mnt_namespace *mntns)
+ {
+       return __lookup_next_mnt_ns(mntns, true);
+ }
+ static inline struct mnt_namespace *to_mnt_ns(struct ns_common *ns)
+ {
+       return container_of(ns, struct mnt_namespace, ns);
+ }
diff --cc fs/namespace.c
Simple merge
Simple merge
Simple merge