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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux