fsconfig is a very powerful configuration mechanism except that it only works for filesystems with superblocks. This patch series generalises the useful concept of a multiple step configurational mechanism carried by a file descriptor. The object of this patch series is to get bind mounts to be configurable in the same way that superblock based ones are, but it should have utility beyond the filesytem realm. Patch 4 also reimplements fsconfig in terms of configfd, but that's not a strictly necessary patch, it is merely a useful demonstration that configfd is a superset of the properties of fsconfig. v1 of this patch series was originally sent as an rfc in reply to a thread about feature bugs with the new mount API: https://lore.kernel.org/linux-fsdevel/1574295100.17153.25.camel@xxxxxxxxxxxxxxxxxxxxx/ James --- James Bottomley (6): logger: add a limited buffer logging facility configfd: add generic file descriptor based configuration parser configfd: syscall: wire up configfd syscalls fs: implement fsconfig via configfd fs: expose internal interfaces open_detached_copy and do_reconfigure_mount fs: bind: add configfs type for bind mounts arch/alpha/kernel/syscalls/syscall.tbl | 2 + arch/arm/tools/syscall.tbl | 2 + arch/arm64/include/asm/unistd.h | 2 +- arch/arm64/include/asm/unistd32.h | 4 + arch/ia64/kernel/syscalls/syscall.tbl | 2 + arch/m68k/kernel/syscalls/syscall.tbl | 2 + arch/microblaze/kernel/syscalls/syscall.tbl | 2 + arch/mips/kernel/syscalls/syscall_n32.tbl | 2 + arch/mips/kernel/syscalls/syscall_n64.tbl | 2 + arch/mips/kernel/syscalls/syscall_o32.tbl | 2 + arch/parisc/kernel/syscalls/syscall.tbl | 2 + arch/powerpc/kernel/syscalls/syscall.tbl | 2 + arch/s390/kernel/syscalls/syscall.tbl | 2 + arch/sh/kernel/syscalls/syscall.tbl | 2 + arch/sparc/kernel/syscalls/syscall.tbl | 2 + arch/x86/entry/syscalls/syscall_32.tbl | 2 + arch/x86/entry/syscalls/syscall_64.tbl | 2 + arch/xtensa/kernel/syscalls/syscall.tbl | 2 + fs/Makefile | 3 +- fs/bind.c | 232 ++++++++++++ fs/configfd.c | 450 +++++++++++++++++++++++ fs/filesystems.c | 8 +- fs/fs_context.c | 124 +------ fs/fsopen.c | 535 ++++++++++++++-------------- fs/internal.h | 7 + fs/namespace.c | 115 +++--- include/linux/configfd.h | 61 ++++ include/linux/fs.h | 2 + include/linux/fs_context.h | 29 +- include/linux/fs_parser.h | 2 + include/linux/logger.h | 34 ++ include/linux/syscalls.h | 5 + include/uapi/asm-generic/unistd.h | 7 +- include/uapi/linux/configfd.h | 20 ++ lib/Makefile | 3 +- lib/logger.c | 211 +++++++++++ 36 files changed, 1413 insertions(+), 473 deletions(-) create mode 100644 fs/bind.c create mode 100644 fs/configfd.c create mode 100644 include/linux/configfd.h create mode 100644 include/linux/logger.h create mode 100644 include/uapi/linux/configfd.h create mode 100644 lib/logger.c -- 2.16.4