Review? last-minute f10 change for ext4

Eric Sandeen sandeen at redhat.com
Fri Nov 7 22:03:07 UTC 2008


AFAICS, these 2 changes only affect ext4.  But since it's
in mm/page-writeback.c, I'd sure like another set of eyes
to be sure I'm not dragged into the streets for breaking
F10 at the last minute in an effort to get one final ext4
update into the release...  Out of an abundance of caution...
anyone care to give me a little cover? :)

Thanks,

-Eric

From: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
Date: Tue, 14 Oct 2008 13:21:02 +0000 (-0400)
Subject: vfs: Remove the range_cont writeback mode.
X-Git-Tag: v2.6.28-rc1~257^2~8
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=74baaaaec8b4f22e1ae279f5ecca4ff705b28912

vfs: Remove the range_cont writeback mode.

Ext4 was the only user of range_cont writeback mode and ext4 switched
to a different method. So remove the range_cont mode which is not used
in the kernel.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
CC: linux-fsdevel at vger.kernel.org
---

From: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
Date: Thu, 16 Oct 2008 14:09:17 +0000 (-0400)
Subject: vfs: Add no_nrwrite_index_update writeback control flag
X-Git-Tag: v2.6.28-rc1~257^2~7
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=17bc6c30cf6bfffd816bdc53682dd46fc34a2cf4

vfs: Add no_nrwrite_index_update writeback control flag

If no_nrwrite_index_update is set we don't update nr_to_write and
address space writeback_index in write_cache_pages.  This change
enables a file system to skip these updates in write_cache_pages and do
them in the writepages() callback.  This patch will be followed by an
ext4 patch that make use of these new flags.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso at mit.edu>
CC: linux-fsdevel at vger.kernel.org
---


Index: linux-2.6.27.noarch/include/linux/writeback.h
===================================================================
--- linux-2.6.27.noarch.orig/include/linux/writeback.h	2008-10-09 17:13:53.000000000 -0500
+++ linux-2.6.27.noarch/include/linux/writeback.h	2008-11-07 15:16:16.420063484 -0600
@@ -63,7 +63,15 @@ struct writeback_control {
 	unsigned for_writepages:1;	/* This is a writepages() call */
 	unsigned range_cyclic:1;	/* range_start is cyclic */
 	unsigned more_io:1;		/* more io to be dispatched */
-	unsigned range_cont:1;
+	/*
+	 * write_cache_pages() won't update wbc->nr_to_write and
+	 * mapping->writeback_index if no_nrwrite_index_update
+	 * is set.  write_cache_pages() may write more than we
+	 * requested and we want to make sure nr_to_write and
+	 * writeback_index are updated in a consistent manner
+	 * so we use a single control to update them
+	 */
+	unsigned no_nrwrite_index_update:1;
 };
 
 /*
Index: linux-2.6.27.noarch/mm/page-writeback.c
===================================================================
--- linux-2.6.27.noarch.orig/mm/page-writeback.c	2008-10-09 17:13:53.000000000 -0500
+++ linux-2.6.27.noarch/mm/page-writeback.c	2008-11-07 15:16:16.422063553 -0600
@@ -876,6 +876,7 @@ int write_cache_pages(struct address_spa
 	pgoff_t end;		/* Inclusive */
 	int scanned = 0;
 	int range_whole = 0;
+	long nr_to_write = wbc->nr_to_write;
 
 	if (wbc->nonblocking && bdi_write_congested(bdi)) {
 		wbc->encountered_congestion = 1;
@@ -939,7 +940,7 @@ retry:
 				unlock_page(page);
 				ret = 0;
 			}
-			if (ret || (--(wbc->nr_to_write) <= 0))
+			if (ret || (--nr_to_write <= 0))
 				done = 1;
 			if (wbc->nonblocking && bdi_write_congested(bdi)) {
 				wbc->encountered_congestion = 1;
@@ -958,11 +959,12 @@ retry:
 		index = 0;
 		goto retry;
 	}
-	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
-		mapping->writeback_index = index;
+	if (!wbc->no_nrwrite_index_update) {
+		if (wbc->range_cyclic || (range_whole && nr_to_write > 0))
+			mapping->writeback_index = index;
+		wbc->nr_to_write = nr_to_write;
+	}
 
-	if (wbc->range_cont)
-		wbc->range_start = index << PAGE_CACHE_SHIFT;
 	return ret;
 }
 EXPORT_SYMBOL(write_cache_pages);




More information about the Fedora-kernel-list mailing list