- inodes-forever-dirty-fix.patch removed from -mm tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The patch titled

     inodes forever dirty fix

has been removed from the -mm tree.  Its filename is

     inodes-forever-dirty-fix.patch

This patch was dropped because it is obsolete

------------------------------------------------------
Subject: inodes forever dirty fix
From: Andreas Gruenbacher <agruen@xxxxxxx>


inodes like /dev/ram0 have a double life both as device inodes, and as inodes
describing a ramdisk. This has lead to a bug where inodes would clog the
s_io list of a superblock, and no further inodes would make it to disk. Fixed
in [1]. Later, [2] re-introduced an optimization that [1] removed. The result
is that some inodes remain dirty forever, bouncing between s_io and s_dirty.
This happens as follows:

  - An inode like /dev/ram0 is opened, which sets BDI_CAP_NO_WRITEBACK in
    the inode's backing_dev_info->capabilities. bdi_cap_writeback_dirty
    becomes false.

  - The inode changes, e.g., chmod 0660 /dev/ram0, so the inode goes on
    s_dirty.

  - sync (which speeds up things, but makes no functional difference).

  - sync_sb_inodes() moves it from s_dirty to s_io, then finds it cannot
    writepage the inode, and moves it back to s_dirty. It will see the
    same inode again at some later point.

  - The inode never gets to __writeback_single_inode(), and never becomes
    clean again.


Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---

 fs/fs-writeback.c |    8 +-------
 1 files changed, 1 insertion(+), 7 deletions(-)

diff -puN fs/fs-writeback.c~inodes-forever-dirty-fix fs/fs-writeback.c
--- 25/fs/fs-writeback.c~inodes-forever-dirty-fix	Mon Oct 24 16:35:44 2005
+++ 25-akpm/fs/fs-writeback.c	Mon Oct 24 16:38:35 2005
@@ -320,20 +320,14 @@ sync_sb_inodes(struct super_block *sb, s
 		long pages_skipped;
 
 		if (!bdi_cap_writeback_dirty(bdi)) {
-			list_move(&inode->i_list, &sb->s_dirty);
 			if (sb == blockdev_superblock) {
 				/*
 				 * Dirty memory-backed blockdev: the ramdisk
 				 * 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)) {
_

Patches currently in -mm which might be from agruen@xxxxxxx are

origin.patch
git-kbuild.patch

-
To unsubscribe from this list: send the line "unsubscribe mm-commits" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Newbies FAQ]     [Kernel Archive]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [Bugtraq]     [Photo]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux