David Howells 3e1aeb00e6 vfs: Implement a filesystem superblock creation/configuration context
[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: David Howells <dhowells@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2019-02-28 03:29:26 -05:00
..
2019-01-04 13:13:48 -08:00
2019-01-14 05:55:51 +12:00
2019-01-06 08:36:21 -05:00
2018-08-21 23:54:17 -04:00
2018-12-03 15:30:24 -06:00
\n
2018-12-27 17:00:35 -08:00
2019-01-06 12:19:23 -08:00
2018-12-31 09:41:37 -08:00
2018-12-27 17:12:30 -08:00
2018-11-30 14:56:14 -08:00
2018-08-17 16:20:28 -07:00
2018-09-29 22:47:48 -04:00
2019-01-17 12:02:57 -05:00
2019-01-02 16:35:23 -08:00
2019-01-02 16:35:23 -08:00
2018-11-05 14:57:05 -05:00
2019-01-07 08:53:32 +01:00
\n
2018-12-27 17:00:35 -08:00
2018-07-03 16:44:45 -04:00
2018-10-29 14:29:58 -07:00
2018-06-05 19:23:26 +02:00
2018-12-31 09:46:39 -08:00
2018-10-31 08:54:16 -07:00
2018-12-04 09:38:05 -07:00
2018-12-28 20:54:57 -08:00
2018-10-21 10:46:42 -04:00
2018-12-28 12:45:04 -08:00
2019-02-28 03:28:53 -05:00
2019-02-28 03:28:53 -05:00
2019-01-30 17:44:07 -05:00
2019-02-28 03:28:53 -05:00
2018-08-21 18:19:09 -07:00
2019-01-30 17:44:27 -05:00