vfs: syscall: Add open_tree(2) to reference or clone a mount
open_tree(dfd, pathname, flags) Returns an O_PATH-opened file descriptor or an error. dfd and pathname specify the location to open, in usual fashion (see e.g. fstatat(2)). flags should be an OR of some of the following: * AT_PATH_EMPTY, AT_NO_AUTOMOUNT, AT_SYMLINK_NOFOLLOW - same meanings as usual * OPEN_TREE_CLOEXEC - make the resulting descriptor close-on-exec * OPEN_TREE_CLONE or OPEN_TREE_CLONE | AT_RECURSIVE - instead of opening the location in question, create a detached mount tree matching the subtree rooted at location specified by dfd/pathname. With AT_RECURSIVE the entire subtree is cloned, without it - only the part within in the mount containing the location in question. In other words, the same as mount --rbind or mount --bind would've taken. The detached tree will be dissolved on the final close of obtained file. Creation of such detached trees requires the same capabilities as doing mount --bind. Signed-off-by:Al Viro <viro@zeniv.linux.org.uk> Signed-off-by:
David Howells <dhowells@redhat.com> cc: linux-api@vger.kernel.org Signed-off-by:
Al Viro <viro@zeniv.linux.org.uk>
Showing
- arch/x86/entry/syscalls/syscall_32.tbl 2 additions, 1 deletionarch/x86/entry/syscalls/syscall_32.tbl
- arch/x86/entry/syscalls/syscall_64.tbl 1 addition, 0 deletionsarch/x86/entry/syscalls/syscall_64.tbl
- fs/file_table.c 6 additions, 3 deletionsfs/file_table.c
- fs/internal.h 1 addition, 0 deletionsfs/internal.h
- fs/namespace.c 135 additions, 22 deletionsfs/namespace.c
- include/linux/fs.h 5 additions, 2 deletionsinclude/linux/fs.h
- include/linux/syscalls.h 1 addition, 0 deletionsinclude/linux/syscalls.h
- include/uapi/linux/fcntl.h 2 additions, 0 deletionsinclude/uapi/linux/fcntl.h
- include/uapi/linux/mount.h 6 additions, 0 deletionsinclude/uapi/linux/mount.h
Loading
Please register or sign in to comment