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(a)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;...
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(a)linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso(a)mit.edu>
CC: linux-fsdevel(a)vger.kernel.org
---
From: Aneesh Kumar K.V <aneesh.kumar(a)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;...
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(a)linux.vnet.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso(a)mit.edu>
CC: linux-fsdevel(a)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);