• Andi Kleen's avatar
    [PATCH] Sync in core time granuality with filesystems · 8ce13b01
    Andi Kleen authored
    This patch corrects a problem that was originally added with the nanosecond
    timestamps in stat patch.  The problem is that some file systems don't have
    enough space in their on disk inode to save nanosecond timestamps, so they
    truncate the c/a/mtime to seconds when flushing an dirty node.  In core the
    inode would have full jiffies granuality.
    
    This can be observed by programs as a timestamp that jumps backwards under
    specific loads when an inode is flushed and then reloaded from disk.
    
    The problem was already known when the original patch went in, but it
    wasn't deemed important enough at that time.  So far there has been only
    one report of it causing problems.  Now Tridge is worried that it will
    break running Excel over samba4 because Excel seems to do very anal
    timestamp checking and samba4 will supply 100ns timestamps over the
    network.
    
    This patch solves it by putting the time resolution into the superblock of
    a fs and always rounding the in core timestamps to that granuality.
    
    This also supercedes some previous ext2/3 hacks to flush the inode less
    often when only the subsecond timestamp changes.
    
    I tried to keep the overhead low, in particular it tries to keep divisions
    out of fast paths as far as possible.
    
    The patch is quite big but 99% of it is just relatively straight forward
    search'n'replace in a lot of fs.  Unconverted filesystems will default to a
    1ns granuality, but may still show the problem if they continue to use
    CURRENT_TIME.  I converted all in tree fs.
    
    One possible future extension of this would be to have two time
    granualities per superblock - one that specifies the visible resolution,
    and the other to specify how often timestamps should be flushed to disk,
    which could be tuned with a mount option per fs (e.g.  often m/atimes don't
    need to be flushed every second).  Would be easy to do as an addon if
    someone is interested.
    Signed-off-by: default avatarAndi Kleen <ak@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    8ce13b01
emd.c 15.7 KB