• Andrew Morton's avatar
    [PATCH] Ext2/3 noatime and dirsync fixes · 3bdfab20
    Andrew Morton authored
    Patch from "Theodore Ts'o" <tytso@mit.edu>
    
    I recently noticed a bug in ext2/3; newly created inodes which inherit
    the noatime flag from their containing directory do not respect noatime
    until the inode is flushed from the inode cache and then re-read later.
    This is because the code which checks the ext2 no-atime attribute and
    then sets the S_NOATIME in inode->i_flags is present in
    ext2_read_inode(), but not in ext2_new_inode().
    
    I fixed this in 2.4, and then found an even worse bug in the 2.5 code;
    the DIRSYNC flag is completely ignored *except* in the case where a
    directory is newly created using mkdir and its parent directory has the
    DIRSYNC flag.  S_DIRSYNC doesn't get set in the ext2_new_inode() or the
    ext2_ioctl() paths (which is used by chattr).
    
    This patch centralizes the code which translates the ext2 flags in the
    raw ext2 inode to the appropriate flag values in inode->i_flags in a
    single location.  This fixes the bug, makes things cleaner, and also
    removes 30 lines of code and 128 bytes of compiled x86 text in the
    bargain.
    3bdfab20
inode.c 36.4 KB