• Andrew Morton's avatar
    [PATCH] dirsync · bb772c58
    Andrew Morton authored
    An implementation of directory-synchronous mounts.
    
    I sent this out some months ago and it didn't generate a lot of
    interest.  Later we had one of the usual cheery exchanges with Wietse
    Venema (postfix development) and he agreed that directory synchronous
    mounts were something that he could use, and that there was benefit in
    implementing them in Linux.  If you choose to apply this I'll push the
    2.4 patch.
    
    
    
    Patch against e2fsprogs-1.26:
            http://www.zip.com.au/~akpm/linux/dirsync/e2fsprogs-1.26.patch
    
    Patch against util-linux-2.11n:
            http://www.zip.com.au/~akpm/linux/dirsync/util-linux-2.11n.patch
    
    
    The kernel patch includes implementations for ext2 and ext3. It's
    pretty simple.
    
    - When dirsync is in operation against a directory, the following operations
      are synchronous within that directory:  create, link, unlink, symlink,
      mkdir, rmdir, mknod, rename (synchronous if either the source or dest
      directory is dirsync).
    
    - dirsync is a subset of sync.  So `mount -o sync' or `chattr +S'
      give you everything which `mount -o dirsync' or `chattr +D' gives,
      plus synchronous file writes.
    
    - ext2's inode.i_attr_flags is unused, and is removed.
    
    - mount /dev/foo /mnt/bar -o dirsync  works as expected.
    
    - An ext2 or ext3 directory tree can be set dirsync with `chattr +D -R'.
    
    - dirsync is maintained as new directories are created under
      a `chattr +D' directory.  Like `chattr +S'.
    
    - Other filesystems can trivially be taught about dirsync.  It's just
      a matter of replacing `IS_SYNC(inode)' with `IS_DIRSYNC(inode)' in
      the directory update functions.  IS_SYNC will still be honoured when
      IS_DIRSYNC is used.
    
    - Non-directory files do not have their dirsync flag propagated.  So
      an S_ISREG file which is created inside a dirsync directory will not
      have its dirsync bit set.  chattr needs to do this as well.
    
    - There was a bit of version skew between e2fsprogs' idea of the
      inode flags and the kernel's.  That is sorted out here.
    
    - `lsattr' shows the dirsync flag as "D".  The letter "D" was
      previously being used for Compressed_Dirty_File.  I changed
      Compressed_Dirty_File to use "Z".  Is that OK?
    
    The mount(2) manpage needs to be taught about MS_DIRSYNC.
    bb772c58
dir.c 16 KB