2011-03-23 02:12:09

by Valerie Aurora

[permalink] [raw]
Subject: Re: [PATCH 00/74] Union mounts version something or other

And I cc'd [email protected] on all the patches instead of
[email protected] - guess I'm really out of the kernel
business now! Anyway, if you want your replies to go to lkml, you'll
have to hand edit the cc list.

-VAL

On Tue, Mar 22, 2011 at 6:58 PM, Valerie Aurora
<[email protected]> wrote:
> Hi union mounts fans(?),
>
> Here's my current union mounts patch set, against 2.6.36-rc5. ?I'm
> busy with other things[1] and unlikely to put in significant work on
> union mounts in the next year. ?I'm happy to answer questions from
> anyone else working on them.
>
> As always, git trees for the kernel, util-linux, and e2fsprogs, lots
> of documentation, and LWN articles describing the various problems
> unioning file systems will encounter are here:
>
> http://valerieaurora.org/union/
>
> The devkit linked to from that page includes my Usermode Linux testing
> environment, including root file system image. ?The README tells you
> how to run the test suite automatically (yes, an automated test suite
> - with Makefile and version control and comments and stuff!).
>
> I took a quick look at the current overlayfs patch set, and it's
> small, clean, and easy to understand. ?If it does what people need, I
> say ship it.
>
> Thanks to everyone who reviewed and submitted patches for union mounts!
>
> -VAL
>
> [1] http://adainitiative.org
>
> ---
>
> Felix Fietkau (2):
> ?whiteout: jffs2 whiteout support
> ?fallthru: jffs2 fallthru support
>
> Jan Blunck (9):
> ?VFS: Make lookup_hash() return a struct path
> ?autofs4: Save autofs trigger's vfsmount in super block info
> ?whiteout/NFSD: Don't return information about whiteouts to userspace
> ?whiteout: Add vfs_whiteout() and whiteout inode operation
> ?whiteout: Allow removal of a directory with whiteouts
> ?whiteout: tmpfs whiteout support
> ?union-mount: Introduce MNT_UNION and MS_UNION flags
> ?union-mount: Free union stack on removal of topmost dentry from
> ? ?dcache
> ?union-mount: Create IS_MNT_UNION()
>
> Valerie Aurora (63):
> ?VFS: Comment follow_mount() and friends
> ?Documentation: Fix trivial typo in filesystems/sharedsubtree.txt
> ?whiteout: Define opaque inode flags and operations
> ?ext2: Add ext2_dirent_in_use()
> ?ext2: Split ext2_add_entry() from ext2_add_link()
> ?whiteout: ext2 whiteout support
> ?fallthru: Basic fallthru definitions
> ?fallthru: ext2 fallthru support
> ?fallthru: tmpfs fallthru support
> ?VFS: Add hard read-only users count to superblock
> ?VFS: Make clone_mnt()/copy_tree()/collect_mounts() return errors
> ?VFS: Add CL_NO_SHARED flag to clone_mnt()/copy_tree()
> ?VFS: Add CL_NO_SLAVE flag to clone_mnt()/copy_tree()
> ?VFS: Add CL_MAKE_HARD_READONLY flag to clone_mnt()/copy_tree()
> ?union-mount: Union mounts documentation
> ?union-mount: Add CONFIG_UNION_MOUNT option
> ?union-mount: Create union_stack structure
> ?union-mount: Add two superblock fields for union mounts
> ?union-mount: Add union_alloc()
> ?union-mount: Add union_find_dir()
> ?union-mount: Create d_free_unions()
> ?union-mount: Create union_add_dir()
> ?union-mount: Add union_create_topmost_dir()
> ?union-mount: Create needs_lookup_union()
> ?union-mount: Create check_topmost_union_mnt()
> ?union-mount: Add clone_union_tree() and put_union_sb()
> ?union-mount: Create build_root_union()
> ?union-mount: Create prepare_mnt_union() and cleanup_mnt_union()
> ?union-mount: Prevent improper union-related remounts
> ?union-mount: Prevent topmost file system from being mounted elsewhere
> ?union-mount: Prevent bind mounts of union mounts
> ?union-mount: Implement union mount
> ?union-mount: Temporarily disable some syscalls
> ?union-mount: Basic infrastructure of __lookup_union()
> ?union-mount: Process negative dentries in __lookup_union()
> ?union-mount: Return files found in lower layers in __lookup_union()
> ?union-mount: Build union stack in __lookup_union()
> ?union-mount: Follow mount in __lookup_union()
> ?union-mount: Add lookup_union()
> ?union-mount: Add do_lookup_union() wrapper for __lookup_union()
> ?union-mount: Call union lookup functions in lookup path
> ?union-mount: Create whiteout on unlink()
> ?union-mount: Create whiteout on rmdir()
> ?union-mount: Set opaque flag on new directories in unioned file
> ? ?systems
> ?union-mount: Copy up directory entries on first readdir()
> ?union-mount: Add generic_readdir_fallthru() helper
> ?fallthru: ext2 support for lookup of d_type/d_ino in fallthrus
> ?fallthru: tmpfs support for lookup of d_type/d_ino in fallthrus
> ?fallthru: jffs2 support for lookup of d_type/d_ino in fallthrus
> ?VFS: Split inode_permission() and create path_permission()
> ?VFS: Create user_path_nd() to lookup both parent and target
> ?union-mount: In-kernel file copyup routines
> ?union-mount: Implement union-aware access()/faccessat()
> ?union-mount: Implement union-aware link()
> ?union-mount: Implement union-aware rename()
> ?union-mount: Implement union-aware writable open()
> ?union-mount: Implement union-aware chown()
> ?union-mount: Implement union-aware truncate()
> ?union-mount: Implement union-aware chmod()/fchmodat()
> ?union-mount: Implement union-aware lchown()
> ?union-mount: Implement union-aware utimensat()
> ?union-mount: Implement union-aware setxattr()
> ?union-mount: Implement union-aware lsetxattr()
>
> ?Documentation/filesystems/sharedsubtree.txt | ? ?4 +-
> ?Documentation/filesystems/union-mounts.txt ?| ?751 +++++++++++++++++++++++++
> ?Documentation/filesystems/vfs.txt ? ? ? ? ? | ? 16 +-
> ?fs/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 13 +
> ?fs/Makefile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?1 +
> ?fs/autofs4/autofs_i.h ? ? ? ? ? ? ? ? ? ? ? | ? ?1 +
> ?fs/autofs4/init.c ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 11 +-
> ?fs/autofs4/root.c ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?6 +
> ?fs/compat.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?9 +
> ?fs/dcache.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 32 +-
> ?fs/ext2/dir.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ?116 ++++-
> ?fs/ext2/ext2.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?3 +
> ?fs/ext2/inode.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 11 +-
> ?fs/ext2/namei.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 85 +++-
> ?fs/ext2/super.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?6 +
> ?fs/jffs2/dir.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?117 ++++-
> ?fs/jffs2/fs.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?4 +
> ?fs/jffs2/super.c ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?2 +-
> ?fs/libfs.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 20 +-
> ?fs/namei.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?807 ++++++++++++++++++++++++---
> ?fs/namespace.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?394 +++++++++++--
> ?fs/nfsd/nfs3xdr.c ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?5 +
> ?fs/nfsd/nfs4xdr.c ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?5 +
> ?fs/nfsd/nfsxdr.c ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?4 +
> ?fs/open.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ?116 ++++-
> ?fs/pnode.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?5 +-
> ?fs/pnode.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?3 +
> ?fs/readdir.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 18 +
> ?fs/super.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?9 +
> ?fs/union.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?714 ++++++++++++++++++++++++
> ?fs/union.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?105 ++++
> ?fs/utimes.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 14 +-
> ?fs/xattr.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 65 ++-
> ?include/linux/dcache.h ? ? ? ? ? ? ? ? ? ? ?| ? 37 ++-
> ?include/linux/ext2_fs.h ? ? ? ? ? ? ? ? ? ? | ? ?8 +
> ?include/linux/fs.h ? ? ? ? ? ? ? ? ? ? ? ? ?| ? 45 ++
> ?include/linux/jffs2.h ? ? ? ? ? ? ? ? ? ? ? | ? ?8 +
> ?include/linux/mount.h ? ? ? ? ? ? ? ? ? ? ? | ? ?4 +
> ?include/linux/namei.h ? ? ? ? ? ? ? ? ? ? ? | ? ?2 +
> ?kernel/audit_tree.c ? ? ? ? ? ? ? ? ? ? ? ? | ? 10 +-
> ?mm/shmem.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ?193 ++++++-
> ?41 files changed, 3551 insertions(+), 228 deletions(-)
> ?create mode 100644 Documentation/filesystems/union-mounts.txt
> ?create mode 100644 fs/union.c
> ?create mode 100644 fs/union.h
>
>


2011-03-24 13:43:21

by Ric Wheeler

[permalink] [raw]
Subject: Union mounts comparison with overlay file system prototype?

On 03/22/2011 10:12 PM, Valerie Aurora wrote:
> And I cc'd [email protected] on all the patches instead of
> [email protected] - guess I'm really out of the kernel
> business now! Anyway, if you want your replies to go to lkml, you'll
> have to hand edit the cc list.
>
> -VAL
>
Val, Miklos,

Can one or both of you summarize what we union mounts and overlay do better or
worse? Do we need both or just one?

Thanks!

Ric

2011-03-25 11:38:33

by Miklos Szeredi

[permalink] [raw]
Subject: Re: Union mounts comparison with overlay file system prototype?

On Thu, Mar 24, 2011 at 2:43 PM, Ric Wheeler <[email protected]> wrote:
> Can one or both of you summarize what we union mounts and overlay do better
> or worse? Do we need both or just one?

The semantics are very similar, the differences are in the implementation.

Union mounts:

- whiteout/opaque/fallthrough support in filesystems
- whiteout operation is atomic
- no dentry and inode duplication
- copy up on lookup and readdir
- does not support union of two read-only trees
- merged directory stored in upper tree

Overlayfs

- whiteout/opaque as xattrs
- whiteout operation is not atomic
- dentry and inode duplication(*)
- only copy up on modification
- supports union of two read-only trees
- merged directory not cached(**)

(*) it's possible to eliminate inode duplication of non-directories
with some VFS modifications
(**) caching should be possible to do

2011-03-25 12:12:51

by Ric Wheeler

[permalink] [raw]
Subject: Re: Union mounts comparison with overlay file system prototype?

On 03/25/2011 07:38 AM, Szeredi Miklos wrote:
> On Thu, Mar 24, 2011 at 2:43 PM, Ric Wheeler<[email protected]> wrote:
>> Can one or both of you summarize what we union mounts and overlay do better
>> or worse? Do we need both or just one?
> The semantics are very similar, the differences are in the implementation.
>
> Union mounts:
>
> - whiteout/opaque/fallthrough support in filesystems
> - whiteout operation is atomic
> - no dentry and inode duplication
> - copy up on lookup and readdir
> - does not support union of two read-only trees
> - merged directory stored in upper tree
>
> Overlayfs
>
> - whiteout/opaque as xattrs
> - whiteout operation is not atomic
> - dentry and inode duplication(*)
> - only copy up on modification
> - supports union of two read-only trees
> - merged directory not cached(**)
>
> (*) it's possible to eliminate inode duplication of non-directories
> with some VFS modifications
> (**) caching should be possible to do

Thanks for the high level overview!

Ric