aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Morton <akpm@linux-foundation.org>2007-10-17 02:30:33 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-17 11:43:02 -0400
commit9852a0e76cd9c89e71f84e784212fdd7a97ae93a (patch)
treee655477605be55176a99a01e14e3b60454bd2012
parent6610a0bc8dcc120daa1d93807d470d5cbf777c39 (diff)
writeback: fix time ordering of the per superblock dirty inode lists: memory-backed inodes
For reasons which escape me, inodes which are dirty against a ram-backed filesystem are managed in the same way as inodes which are backed by real devices. Probably we could optimise things here. But given that we skip the entire supeblock as son as we hit the first dirty inode, there's not a lot to be gained. And the code does need to handle one particular non-backed superblock: the kernel's fake internal superblock which holds all the blockdevs. Still. At present when the code encounters an inode which is dirty against a memory-backed filesystem it will skip that inode by refiling it back onto s_dirty. But it fails to update the inode's timestamp when doing so which at least makes the debugging code upset. Fix. Cc: Mike Waychison <mikew@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/fs-writeback.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
index 08b9f83b645e..f8618e0bb62b 100644
--- a/fs/fs-writeback.c
+++ b/fs/fs-writeback.c
@@ -354,7 +354,7 @@ sync_sb_inodes(struct super_block *sb, struct writeback_control *wbc)
354 long pages_skipped; 354 long pages_skipped;
355 355
356 if (!bdi_cap_writeback_dirty(bdi)) { 356 if (!bdi_cap_writeback_dirty(bdi)) {
357 list_move(&inode->i_list, &sb->s_dirty); 357 redirty_tail(inode);
358 if (sb_is_blkdev_sb(sb)) { 358 if (sb_is_blkdev_sb(sb)) {
359 /* 359 /*
360 * Dirty memory-backed blockdev: the ramdisk 360 * Dirty memory-backed blockdev: the ramdisk