If an inode is backed by a memory-backed backing_dev, and it is not a blockdev
inode, we can skip the entire superblock duwing writeback scanning.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/fs-writeback.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff -puN fs/fs-writeback.c~memory-backed-inodes-fix fs/fs-writeback.c
--- 25/fs/fs-writeback.c~memory-backed-inodes-fix	2004-07-26 17:51:08.609511440 -0700
+++ 25-akpm/fs/fs-writeback.c	2004-07-26 17:51:08.613510832 -0700
@@ -304,14 +304,20 @@ sync_sb_inodes(struct super_block *sb, s
 		long pages_skipped;
 
 		if (bdi->memory_backed) {
+			list_move(&inode->i_list, &sb->s_dirty);
 			if (sb == blockdev_superblock) {
 				/*
 				 * Dirty memory-backed blockdev: the ramdisk
-				 * driver does this.
+				 * driver does this.  Skip just this inode
 				 */
-				list_move(&inode->i_list, &sb->s_dirty);
 				continue;
 			}
+			/*
+			 * Dirty memory-backed inode against a filesystem other
+			 * than the kernel-internal bdev filesystem.  Skip the
+			 * entire superblock.
+			 */
+			break;
 		}
 
 		if (wbc->nonblocking && bdi_write_congested(bdi)) {
_