[PATCH 00/32] VFS based Union Mount (V3)

From: Jan Blunck
Date: Mon May 18 2009 - 12:16:03 EST


Here is another post of the VFS based union mount implementation.

Traditionally the mount operation is opaque, which means that the content of
the mount point, the directory where the file system is mounted on, is hidden
by the content of the mounted file system's root directory until the file
system is unmounted again. Unlike the traditional UNIX mount mechanism, that
hides the contents of the mount point, a union mount presents a view as if
both filesystems are merged together. Although only the topmost layer of the
mount stack can be altered, it appears as if transparent file system mounts
allow any file to be created, modified or deleted.

Most people know the concepts and features of union mounts from other
operating systems like Sun's Translucent Filesystem, Plan9 or BSD. For an
in-depth review of union mounts and other unioning file systems, see:

http://lwn.net/Articles/324291/
http://lwn.net/Articles/325369/
http://lwn.net/Articles/327738/

Here are the key features of this implementation:
- completely VFS based
- does not change the namespace stacking
- directory listings have duplicate entries removed in the kernel
- writable unions: only the topmost file system layer may be writable
- writable unions: new whiteout filetype handled inside the kernel

Major changes since last post:
- Updated the whiteout patches:
- DCACHE_WHITEOUT flag set on a negative dentry
- uses filetype instead of reserved inode number on EXT2
- Copy-up directories during lookup
- Implemented fallthru support for in-kernel readdir() as proposed by
Valerie Aurora (Henson)
- Bugfixes

Valerie updated the HOWTO page and the UML disk image. You can find her
instruction how to testdrive the code here:

http://valerieaurora.org/union/

The following patches apply on 2.6.29. Comments are welcome!

Cheers,
Jan


Jan Blunck (26):
atomic: Only take lock when the counter drops to zero on UP as well
VFS: BUG() if somebody tries to rehash an already hashed dentry
VFS: propagate mnt_flags into do_loopback
VFS: Make lookup_hash() return a struct path
VFS: Remove unnecessary micro-optimization in cached_lookup()
VFS: Make real_lookup() return a struct path
VFS: Introduce dput() variant that maintains a kill-list
whiteout: Don't return information about whiteouts to userspace
whiteout: Add vfs_whiteout() and whiteout inode operation
whiteout: Set S_OPAQUE inode flag when creating directories
whiteout: Add whiteout support to tmpfs
whiteout: Split of ext2_append_link() from ext2_add_link()
whiteout: Add whiteout support to ext2
whiteout: Add path_whiteout() helper
union-mount: Documentation
union-mount: Introduce MNT_UNION and MS_UNION flags
union-mount: Introduce union_mount structure
union-mount: Drive the union cache via dcache
union-mount: Some checks during namespace changes
union-mount: Changes to the namespace handling
union-mount: Make lookup work for union-mounted file systems
union-mount: stop lookup when directory has S_OPAQUE flag set
union-mount: stop lookup when finding a whiteout
union-mount: in-kernel file copy between union mounted filesystems
union-mount: check for logically empty directory (FIXME)
union-mount: call do_whiteout() on unlink and rmdir

Valerie Aurora (Henson) (6):
union-mount: Always create topmost directory on open
union-mount: Basic fallthru definitions
union mount: Support for fallthru entries in union mount lookup
union mount: ext2 fallthru support
union-mount: tmpfs fallthru support
union-mount: Copy up directory entries on first readdir()

Documentation/filesystems/union-mounts.txt | 187 +++++
fs/Kconfig | 8 +
fs/Makefile | 2 +
fs/compat.c | 9 +
fs/dcache.c | 143 ++++-
fs/ext2/dir.c | 242 ++++++-
fs/ext2/ext2.h | 4 +
fs/ext2/inode.c | 11 +-
fs/ext2/namei.c | 85 +++-
fs/ext2/super.c | 8 +
fs/libfs.c | 18 +-
fs/namei.c | 1009 +++++++++++++++++++++++++---
fs/namespace.c | 54 ++-
fs/nfsd/nfs3xdr.c | 5 +
fs/nfsd/nfs4xdr.c | 2 +-
fs/nfsd/nfsxdr.c | 4 +
fs/readdir.c | 25 +
fs/union.c | 948 ++++++++++++++++++++++++++
include/linux/dcache.h | 30 +-
include/linux/ext2_fs.h | 5 +
include/linux/fs.h | 7 +
include/linux/mount.h | 4 +
include/linux/namei.h | 6 +
include/linux/union.h | 82 +++
lib/dec_and_lock.c | 3 +-
mm/shmem.c | 195 +++++-
26 files changed, 2927 insertions(+), 169 deletions(-)
create mode 100644 Documentation/filesystems/union-mounts.txt
create mode 100644 fs/union.c
create mode 100644 include/linux/union.h

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/