• Andrew Morton's avatar
    [PATCH] writeback livelock fix · 294947ec
    Andrew Morton authored
    To avoid various livelocks, the writeback code parks all the dirty inodes onto
    sb->s_io and then works through that list until it is empty.  This assumes
    that each inode will be moved to some other list as it is processed.
    
    But there's a loophole: if the ->writepages() implementation does nothing at
    all, the inode is not redirtied (which would move it to s_dirty).  This causes
    s_io to not empty and pdflush goes nuts.
    
    So when this happens, move the inode onto s_dirty within
    __sync_single_inode().  Use list_move_tail() to attempt to preserve the
    time-ordering of the s_dirty list.
    294947ec
fs-writeback.c 18.2 KB