Here's a set of patches that: (1) Removes calls to save/replace_mount_options() where the filesystem then implements ->show_options() anyway, ignoring ->s_options. (2) Makes all filesystems implement the ->show_options() superblock operation rather than using generic_show_options(). If necessary, extra information is stored in the superblock information. (3) Deletes save_mount_options(), replace_mount_options(), generic_show_options() and super_block::s_options. This makes it easier to implement a context-based mount where the options are passed individually over a file descriptor. It also allows duplicate options, options that override each other and ignored options to be resolved rather than storing irrelevant data. Further, a lot of the time, all the information we want to display is stored in the super block information anyway, so the option string is redundant. Some things I noted whilst doing this: (1) A number of filesystems take uid/gid options. Should these be reported relative to the observer's user namespace rather than init's user namespace? After all, you can't then use those uid/gid options if the numbers are interpreted incorrectly if you try and forge a mount command from them. (2) Should I provide a helper for displaying uid/gid options? (3) How much do we need to worry about racing with remount? Some filesystems happily give out the contents of the super_block without regard to the fact that remount might be changing it simultaneously - ext4, for example. (4) What string options actually need 'munging'? These patches can be found here: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=for-viro on top of three other minor patches. David --- David Howells (14): VFS: Don't use save/replace_mount_options if not using generic_show_options hugetlbfs: Implement show_options omfs: Implement show_options pstore: Implement show_options ramfs: Implement show_options bpf: Implement show_options spufs: Implement show_options befs: Implement show_options affs: Implement show_options afs: Implement show_options isofs: Implement show_options 9p: Implement show_options orangefs: Implement show_options VFS: Kill off s_options and helpers Documentation/filesystems/vfs.txt | 6 -- arch/powerpc/platforms/cell/spufs/inode.c | 21 +++++++-- fs/9p/v9fs.c | 59 ++++++++++++++++++++++++ fs/9p/v9fs.h | 3 + fs/9p/vfs_super.c | 6 +- fs/affs/super.c | 42 +++++++++++++++-- fs/afs/super.c | 45 ++++++++++++++++++- fs/befs/linuxvfs.c | 24 +++++++++- fs/btrfs/super.c | 1 fs/debugfs/inode.c | 2 - fs/efivarfs/super.c | 1 fs/hugetlbfs/inode.c | 70 +++++++++++++++++++++++------ fs/isofs/inode.c | 51 ++++++++++++++++++++- fs/isofs/isofs.h | 3 + fs/namespace.c | 59 ------------------------ fs/omfs/inode.c | 33 ++++++++++++-- fs/orangefs/super.c | 15 ++++++ fs/pstore/inode.c | 14 +++++- fs/pstore/internal.h | 3 + fs/pstore/platform.c | 2 - fs/ramfs/inode.c | 32 +++++++++---- fs/reiserfs/super.c | 4 -- fs/super.c | 1 fs/tracefs/inode.c | 2 - include/linux/fs.h | 9 ---- include/linux/hugetlb.h | 3 + include/net/9p/client.h | 13 +++++ include/net/9p/transport.h | 1 kernel/bpf/inode.c | 16 +++++-- net/9p/client.c | 25 ++++++++++ net/9p/trans_fd.c | 31 ++++++++++++- net/9p/trans_rdma.c | 31 ++++++++++++- 32 files changed, 481 insertions(+), 147 deletions(-)