• Andrew Morton's avatar
    [PATCH] inode dirtying timestamp fix · 18ccf569
    Andrew Morton authored
    It's a bit late in 2.6.5-rc for this, but it does fix a significant bug: for
    the first five minutes after boot, prior to the jiffy wrap, /bin/sync doesn't
    write all of the dirty data.
    
    We currently record an inode's time-of-first-dirtying in the address_space.
    This causes a few problems with dirty block special inodes: when the device
    node for /dev/hda1 needs to be written back we bogusly inspect the timestamp
    for the address_space, which belongs to a different inode.
    
    So move the inode's dirtying time up into the inode itself.
    
    This means that for block-special inodes, inode->dirtied_when represents the
    time at which the inode itself was dirtied.
    
    For regular files it represents the time at which the inode or its pages were
    dirtied.
    
    For blockdevs, the time-of-first-dirtying is recorded in the kernel-internal
    blockdev inode.  Only I_DIRTY_PAGES makes sense on these inodes.
    
    The reason all this works is that when dirtying a page we always run
    
    	__mark_inode_dirty(page->mapping->host);
    
    which refers to the kernel-internal blockdev inode.
    18ccf569
inode.c 36.3 KB