From: Andrew Morton When the writeback function is operating in writeback-for-flushing mode (as opposed to writeback-for-integrity) and it encounters an I_LOCKed inode, it will skip writing that inode. This is done for throughput and latency: move on to another inode rather than blocking for this one. Writeback skips this inode by moving it off s_io and onto s_dirty, so that writeback can proceed with the other inodes on s_io. However that inode movement can corrupt s_dirty's reverse-time-orderedness. Fix that by using the new redirty_tail(), which will update the refiled inode's dirtied_when field. Note: the behaviour in here is a bit rude: if kupdate happens to come across a locked inode then it will defer writeback of that inode for another 30 seconds. We'll address that in the next patch. Cc: Mike Waychison Signed-off-by: Andrew Morton --- fs/fs-writeback.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN fs/fs-writeback.c~writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-5 fs/fs-writeback.c --- a/fs/fs-writeback.c~writeback-fix-time-ordering-of-the-per-superblock-dirty-inode-lists-5 +++ a/fs/fs-writeback.c @@ -307,7 +307,7 @@ __writeback_single_inode(struct inode *i struct address_space *mapping = inode->i_mapping; int ret; - list_move(&inode->i_list, &inode->i_sb->s_dirty); + redirty_tail(inode); /* * Even if we don't actually write the inode itself here, _