[PATCH] writeback livelock fix
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.
Showing
Please register or sign in to comment