• David Howells's avatar
    vfs: Implement a filesystem superblock creation/configuration context · 3e1aeb00
    David Howells authored
    [AV - unfuck kern_mount_data(); we want non-NULL ->mnt_ns on long-living
    mounts]
    [AV - reordering fs/namespace.c is badly overdue, but let's keep it
    separate from that series]
    [AV - drop simple_pin_fs() change]
    [AV - clean vfs_kern_mount() failure exits up]
    
    Implement a filesystem context concept to be used during superblock
    creation for mount and superblock reconfiguration for remount.
    
    The mounting procedure then becomes:
    
     (1) Allocate new fs_context context.
    
     (2) Configure the context.
    
     (3) Create superblock.
    
     (4) Query the superblock.
    
     (5) Create a mount for the superblock.
    
     (6) Destroy the context.
    
    Rather than calling fs_type->mount(), an fs_context struct is created and
    fs_type->init_fs_context() is called to set it up.  Pointers exist for the
    filesystem and LSM to hang their private data off.
    
    A set of operations has to be set by ->init_fs_context() to provide
    freeing, duplication, option parsing, binary data parsing, validation,
    mounting and superblock filling.
    
    Legacy filesystems are supported by the provision of a set of legacy
    fs_context operations that build up a list of mount options and then invoke
    fs_type->mount() from within the fs_context ->get_tree() operation.  This
    allows all filesystems to be accessed using fs_context.
    
    It should be noted that, whilst this patch adds a lot of lines of code,
    there is quite a bit of duplication with existing code that can be
    eliminated should all filesystems be converted over.
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    3e1aeb00
fs_context.c 13.6 KB