From: Al Viro <viro@ZenIV.linux.org.uk>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: dhowells@redhat.com, linux-fsdevel@vger.kernel.org,
linux-api@vger.kernel.org
Subject: [git pull] new mount API
Date: Thu, 23 Aug 2018 23:31:45 +0100 [thread overview]
Message-ID: <20180823223145.GK6515@ZenIV.linux.org.uk> (raw)
new mount API series from Dave Howells
To quote his cover letter,
Here are a set of patches to create a filesystem context prior to setting
up a new mount, populating it with the parsed options/binary data, creating
the superblock and then effecting the mount. This is also used for remount
since much of the parsing stuff is common in many filesystems.
This allows namespaces and other information to be conveyed through the
mount procedure.
This also allows Mikl�s Szeredi's idea of doing:
fd = fsopen("nfs");
fsconfig(fd, FSCONFIG_SET_STRING, "option", "val", 0);
fsconfig(fd, FSCONFIG_CMD_CREATE, NULL, NULL, 0);
mfd = fsmount(fd, MS_NODEV);
move_mount(mfd, "", AT_FDCWD, "/mnt", MOVE_MOUNT_F_EMPTY_PATH);
that he presented at LSF-2017 to be implemented (see the relevant patches
in the series).
I didn't use netlink as that would make the core kernel depend on
CONFIG_NET and CONFIG_NETLINK and would introduce network namespacing
issues.
I've implemented filesystem context handling for procfs, nfs, mqueue,
cpuset, kernfs, sysfs, cgroup and afs filesystems.
Unconverted filesystems are handled by a legacy filesystem wrapper.
One trivial conflict in fs/file_table.c:__fput(); resolved as
if (unlikely(mode & FMODE_NEED_UNMOUNT))
dissolve_on_fput(mnt);
dput(dentry);
mntput(mnt);
out:
file_free(file);
The following changes since commit 32206ab36553be8714d9253ce33f4085681d369c:
x86/intel_rdt: Provide pseudo-locking hooks within rdt_mount (2018-06-23 12:53:19 +0200)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git work.mount
for you to fetch changes up to 294fb3407bf29abf653fbe169af4bbb38a146db5:
proc: Set correct userns for new proc super created by a new pid_namespace (2018-08-21 09:28:43 +0100)
----------------------------------------------------------------
Al Viro (2):
vfs: syscall: Add open_tree(2) to reference or clone a mount
teach move_mount(2) to work with OPEN_TREE_CLONE
Andrei Vagin (1):
proc: Set correct userns for new proc super created by a new pid_namespace
David Howells (42):
vfs: Require specification of size of mount data for internal mounts
vfs: syscall: Add move_mount(2) to move mounts around
vfs: Suppress MS_* flag defs within the kernel unless explicitly enabled
vfs: Introduce the basic header for the new mount API's filesystem context
vfs: Introduce logging functions
vfs: Add configuration parser helpers
vfs: Add LSM hooks for the new mount API
selinux: Implement the new mount API LSM hooks
smack: Implement filesystem context security hooks
apparmor: Implement security hooks for the new mount API
tomoyo: Implement security hooks for the new mount API
vfs: Separate changing mount flags full remount
vfs: Implement a filesystem superblock creation/configuration context
vfs: Remove unused code after filesystem context changes
procfs: Move proc_fill_super() to fs/proc/root.c
proc: Add fs_context support to procfs
ipc: Convert mqueue fs to fs_context
cpuset: Use fs_context
kernfs, sysfs, cgroup, intel_rdt: Support fs_context
hugetlbfs: Convert to fs_context
vfs: Remove kern_mount_data()
vfs: Provide documentation for new mount API
Make anon_inodes unconditional
vfs: syscall: Add fsopen() to prepare for superblock creation
vfs: Implement logging through fs_context
vfs: Add some logging to the core users of the fs_context log
vfs: syscall: Add fsconfig() for configuring and managing a context
vfs: syscall: Add fsmount() to create a mount for a superblock
vfs: syscall: Add fspick() to select a superblock for reconfiguration
afs: Add fs_context support
afs: Use fs_context to pass parameters over automount
vfs: Add a sample program for the new mount API
vfs: syscall: Add fsinfo() to query filesystem information
afs: Add fsinfo support
vfs: Allow fsinfo() to query what's in an fs_context
vfs: Allow fsinfo() to be used to query an fs parameter description
vfs: Implement parameter value retrieval with fsinfo()
vfs: Fix vfs_dup_fs_context()
vfs: Fix fs_context logging when there's no log
afs: Move the source fs parameter to the first position
vfs: Pass path info fsinfo and rename get_fsinfo sb op to fsinfo
vfs: Adjust fsinfo sample output
Documentation/filesystems/mount_api.txt | 706 ++++++++++++++++++++++++
arch/arc/kernel/setup.c | 1 +
arch/arm/kernel/atags_parse.c | 1 +
arch/arm/kvm/Kconfig | 1 -
arch/arm64/kvm/Kconfig | 1 -
arch/ia64/kernel/perfmon.c | 3 +-
arch/mips/kvm/Kconfig | 1 -
arch/powerpc/kvm/Kconfig | 1 -
arch/powerpc/platforms/cell/spufs/inode.c | 6 +-
arch/s390/hypfs/inode.c | 7 +-
arch/s390/kvm/Kconfig | 1 -
arch/sh/kernel/setup.c | 1 +
arch/sparc/kernel/setup_32.c | 1 +
arch/sparc/kernel/setup_64.c | 1 +
arch/x86/Kconfig | 1 -
arch/x86/entry/syscalls/syscall_32.tbl | 7 +
arch/x86/entry/syscalls/syscall_64.tbl | 7 +
arch/x86/kernel/cpu/intel_rdt.h | 15 +
arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 184 ++++---
arch/x86/kernel/setup.c | 1 +
arch/x86/kvm/Kconfig | 1 -
drivers/base/Kconfig | 1 -
drivers/base/devtmpfs.c | 7 +-
drivers/char/tpm/Kconfig | 1 -
drivers/dax/super.c | 2 +-
drivers/dma-buf/Kconfig | 1 -
drivers/gpio/Kconfig | 1 -
drivers/gpu/drm/drm_drv.c | 3 +-
drivers/gpu/drm/i915/i915_gemfs.c | 2 +-
drivers/iio/Kconfig | 1 -
drivers/infiniband/Kconfig | 1 -
drivers/infiniband/hw/qib/qib_fs.c | 7 +-
drivers/misc/cxl/api.c | 3 +-
drivers/misc/ibmasm/ibmasmfs.c | 11 +-
drivers/mtd/mtdsuper.c | 26 +-
drivers/oprofile/oprofilefs.c | 8 +-
drivers/scsi/cxlflash/ocxl_hw.c | 2 +-
drivers/usb/gadget/function/f_fs.c | 7 +-
drivers/usb/gadget/legacy/inode.c | 7 +-
drivers/vfio/Kconfig | 1 -
drivers/virtio/virtio_balloon.c | 2 +-
drivers/xen/xenfs/super.c | 7 +-
fs/9p/vfs_super.c | 2 +-
fs/Kconfig | 7 +
fs/Makefile | 5 +-
fs/adfs/super.c | 9 +-
fs/affs/super.c | 13 +-
fs/afs/internal.h | 10 +-
fs/afs/mntpt.c | 147 ++---
fs/afs/super.c | 634 +++++++++++++--------
fs/afs/volume.c | 4 +-
fs/aio.c | 3 +-
fs/anon_inodes.c | 3 +-
fs/autofs/autofs_i.h | 2 +-
fs/autofs/init.c | 4 +-
fs/autofs/inode.c | 3 +-
fs/befs/linuxvfs.c | 11 +-
fs/bfs/inode.c | 8 +-
fs/binfmt_misc.c | 7 +-
fs/block_dev.c | 2 +-
fs/btrfs/super.c | 30 +-
fs/btrfs/tests/btrfs-tests.c | 2 +-
fs/ceph/super.c | 3 +-
fs/cifs/cifs_dfs_ref.c | 3 +-
fs/cifs/cifsfs.c | 18 +-
fs/coda/inode.c | 11 +-
fs/configfs/mount.c | 7 +-
fs/cramfs/inode.c | 17 +-
fs/debugfs/inode.c | 14 +-
fs/devpts/inode.c | 10 +-
fs/ecryptfs/main.c | 2 +-
fs/efivarfs/super.c | 9 +-
fs/efs/super.c | 14 +-
fs/exofs/super.c | 7 +-
fs/ext2/super.c | 14 +-
fs/ext4/super.c | 16 +-
fs/f2fs/super.c | 13 +-
fs/fat/inode.c | 3 +-
fs/fat/namei_msdos.c | 8 +-
fs/fat/namei_vfat.c | 8 +-
fs/file_table.c | 9 +-
fs/filesystems.c | 4 +
fs/freevxfs/vxfs_super.c | 12 +-
fs/fs_context.c | 779 ++++++++++++++++++++++++++
fs/fs_parser.c | 483 ++++++++++++++++
fs/fsopen.c | 491 +++++++++++++++++
fs/fuse/control.c | 9 +-
fs/fuse/inode.c | 16 +-
fs/gfs2/ops_fstype.c | 6 +-
fs/gfs2/super.c | 4 +-
fs/hfs/super.c | 12 +-
fs/hfsplus/super.c | 12 +-
fs/hostfs/hostfs_kern.c | 7 +-
fs/hpfs/super.c | 11 +-
fs/hugetlbfs/inode.c | 455 ++++++++++------
fs/internal.h | 13 +-
fs/isofs/inode.c | 11 +-
fs/jffs2/super.c | 10 +-
fs/jfs/super.c | 11 +-
fs/kernfs/mount.c | 102 ++--
fs/libfs.c | 19 +-
fs/minix/inode.c | 14 +-
fs/namei.c | 4 +-
fs/namespace.c | 879 ++++++++++++++++++++++--------
fs/nfs/internal.h | 4 +-
fs/nfs/namespace.c | 3 +-
fs/nfs/nfs4namespace.c | 3 +-
fs/nfs/nfs4super.c | 27 +-
fs/nfs/super.c | 22 +-
fs/nfsd/nfsctl.c | 8 +-
fs/nilfs2/super.c | 10 +-
fs/notify/fanotify/Kconfig | 1 -
fs/notify/inotify/Kconfig | 1 -
fs/nsfs.c | 3 +-
fs/ntfs/super.c | 13 +-
fs/ocfs2/dlmfs/dlmfs.c | 5 +-
fs/ocfs2/super.c | 14 +-
fs/omfs/inode.c | 9 +-
fs/openpromfs/inode.c | 11 +-
fs/orangefs/orangefs-kernel.h | 2 +-
fs/orangefs/super.c | 5 +-
fs/overlayfs/super.c | 11 +-
fs/pipe.c | 3 +-
fs/pnode.c | 1 +
fs/proc/inode.c | 50 +-
fs/proc/internal.h | 6 +-
fs/proc/root.c | 247 ++++++---
fs/pstore/inode.c | 10 +-
fs/qnx4/inode.c | 14 +-
fs/qnx6/inode.c | 14 +-
fs/ramfs/inode.c | 6 +-
fs/reiserfs/super.c | 14 +-
fs/romfs/super.c | 13 +-
fs/squashfs/super.c | 12 +-
fs/statfs.c | 571 +++++++++++++++++++
fs/super.c | 397 +++++++++++---
fs/sysfs/mount.c | 67 ++-
fs/sysv/inode.c | 3 +-
fs/sysv/super.c | 16 +-
fs/tracefs/inode.c | 10 +-
fs/ubifs/super.c | 5 +-
fs/udf/super.c | 16 +-
fs/ufs/super.c | 11 +-
fs/xfs/xfs_super.c | 10 +-
include/linux/cgroup.h | 3 +-
include/linux/debugfs.h | 8 +-
include/linux/fs.h | 50 +-
include/linux/fs_context.h | 208 +++++++
include/linux/fs_parser.h | 117 ++++
include/linux/fsinfo.h | 41 ++
include/linux/kernfs.h | 41 +-
include/linux/lsm_hooks.h | 79 ++-
include/linux/module.h | 6 +
include/linux/mount.h | 10 +-
include/linux/mtd/super.h | 4 +-
include/linux/ramfs.h | 4 +-
include/linux/security.h | 72 ++-
include/linux/shmem_fs.h | 3 +-
include/linux/syscalls.h | 13 +
include/uapi/linux/fcntl.h | 2 +
include/uapi/linux/fs.h | 82 ++-
include/uapi/linux/fsinfo.h | 302 ++++++++++
include/uapi/linux/mount.h | 75 +++
init/Kconfig | 10 -
init/do_mounts.c | 5 +-
init/do_mounts_initrd.c | 1 +
ipc/mqueue.c | 120 +++-
kernel/bpf/inode.c | 7 +-
kernel/cgroup/cgroup-internal.h | 50 +-
kernel/cgroup/cgroup-v1.c | 415 ++++++++------
kernel/cgroup/cgroup.c | 285 +++++++---
kernel/cgroup/cpuset.c | 67 ++-
kernel/trace/trace.c | 7 +-
mm/shmem.c | 10 +-
mm/zsmalloc.c | 3 +-
net/socket.c | 3 +-
net/sunrpc/rpc_pipe.c | 7 +-
samples/Kconfig | 6 +
samples/Makefile | 2 +-
samples/mount_api/Makefile | 7 +
samples/mount_api/test-fsmount.c | 118 ++++
samples/statx/Makefile | 7 +-
samples/statx/test-fs-query.c | 137 +++++
samples/statx/test-fsinfo.c | 584 ++++++++++++++++++++
security/apparmor/apparmorfs.c | 8 +-
security/apparmor/include/mount.h | 11 +-
security/apparmor/lsm.c | 111 +++-
security/apparmor/mount.c | 47 ++
security/inode.c | 7 +-
security/security.c | 65 ++-
security/selinux/hooks.c | 320 ++++++++++-
security/selinux/selinuxfs.c | 8 +-
security/smack/smack.h | 11 +-
security/smack/smack_lsm.c | 373 +++++++++++--
security/smack/smackfs.c | 9 +-
security/tomoyo/common.h | 3 +
security/tomoyo/mount.c | 46 ++
security/tomoyo/tomoyo.c | 19 +-
198 files changed, 9288 insertions(+), 1874 deletions(-)
create mode 100644 Documentation/filesystems/mount_api.txt
create mode 100644 fs/fs_context.c
create mode 100644 fs/fs_parser.c
create mode 100644 fs/fsopen.c
create mode 100644 include/linux/fs_context.h
create mode 100644 include/linux/fs_parser.h
create mode 100644 include/linux/fsinfo.h
create mode 100644 include/uapi/linux/fsinfo.h
create mode 100644 include/uapi/linux/mount.h
create mode 100644 samples/mount_api/Makefile
create mode 100644 samples/mount_api/test-fsmount.c
create mode 100644 samples/statx/test-fs-query.c
create mode 100644 samples/statx/test-fsinfo.c
next reply other threads:[~2018-08-24 2:03 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-23 22:31 Al Viro [this message]
2018-08-23 23:24 ` [git pull] new mount API Andy Lutomirski
2018-08-24 0:08 ` David Howells
2018-08-24 0:16 ` Andy Lutomirski
2018-08-24 0:31 ` Al Viro
2018-08-24 2:36 ` Andy Lutomirski
2018-08-24 3:13 ` Al Viro
2018-08-24 4:51 ` Andy Lutomirski
2018-08-24 6:05 ` Theodore Y. Ts'o
2018-08-24 8:38 ` Miklos Szeredi
2018-08-24 8:56 ` Miklos Szeredi
2018-08-24 9:29 ` Miklos Szeredi
2018-08-24 9:45 ` David Howells
2018-08-24 10:06 ` Miklos Szeredi
2018-08-24 14:18 ` Miklos Szeredi
2018-08-24 14:26 ` Karel Zak
2018-08-24 14:26 ` David Howells
2018-08-24 14:30 ` Miklos Szeredi
2018-08-24 14:49 ` Andy Lutomirski
2018-08-24 15:02 ` Miklos Szeredi
2018-08-24 15:09 ` Andy Lutomirski
2018-08-24 17:08 ` Miklos Szeredi
2018-08-24 17:10 ` David Howells
2018-08-24 17:43 ` Andy Lutomirski
2018-08-24 19:25 ` Miklos Szeredi
2018-08-24 19:51 ` Al Viro
2018-08-29 12:32 ` Miklos Szeredi
2018-08-26 3:22 ` Eric W. Biederman
2018-08-26 20:42 ` David Howells
2018-08-26 20:46 ` David Howells
2018-08-26 21:03 ` [PATCH] mqueue: Fix bug from mount API conversion David Howells
2018-08-26 21:22 ` Al Viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180823223145.GK6515@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=dhowells@redhat.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).