From: Fengguang Wu <wfg@mail.ustc.edu.cn>
To: Andrew Morton <akpm@osdl.org>
Cc: Michael Rubin <mrubin@google.com>, Peter Zijlstra <peterz@infradead.org>
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 05/13] writeback: merge duplicate code into writeback_some_pages()
Date: Tue, 15 Jan 2008 20:36:42 +0800 [thread overview]
Message-ID: <400401292.20625@ustc.edu.cn> (raw)
Message-ID: <20080115124759.770126448@mail.ustc.edu.cn> (raw)
In-Reply-To: 20080115123637.518924046@mail.ustc.edu.cn
[-- Attachment #1: writeback-writeback_some_pages.patch --]
[-- Type: text/plain, Size: 2860 bytes --]
Merge duplicate code from background_writeout() and wb_kupdate() into
writeback_some_pages().
The pages_skipped in background_writeout() is ignored. The inode cannot be
written now will be retried in the next run of pdflush, typically in 5s.
Cc: Michael Rubin <mrubin@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---
mm/page-writeback.c | 43 +++++++++++++++++++++---------------------
1 files changed, 22 insertions(+), 21 deletions(-)
--- linux-mm.orig/mm/page-writeback.c
+++ linux-mm/mm/page-writeback.c
@@ -543,6 +543,24 @@ void throttle_vm_writeout(gfp_t gfp_mask
}
/*
+ * writeback up to @nr dirty pages.
+ * return true if there's more work.
+ */
+static int writeback_some_pages(struct writeback_control *wbc, int nr)
+{
+ wbc->more_io = 0;
+ wbc->encountered_congestion = 0;
+ wbc->nr_to_write = nr;
+
+ writeback_inodes(wbc);
+
+ if (wbc->encountered_congestion)
+ congestion_wait(WRITE, HZ/10);
+
+ return wbc->more_io || wbc->encountered_congestion;
+}
+
+/*
* writeback at least _min_pages, and keep writing until the amount of dirty
* memory is less than the background threshold, or until we're all clean.
*/
@@ -553,7 +571,6 @@ static void background_writeout(unsigned
.bdi = NULL,
.sync_mode = WB_SYNC_NONE,
.older_than_this = NULL,
- .nr_to_write = 0,
.nonblocking = 1,
.range_cyclic = 1,
};
@@ -567,17 +584,9 @@ static void background_writeout(unsigned
global_page_state(NR_UNSTABLE_NFS) < background_thresh
&& min_pages <= 0)
break;
- wbc.encountered_congestion = 0;
- wbc.nr_to_write = MAX_WRITEBACK_PAGES;
- wbc.pages_skipped = 0;
- writeback_inodes(&wbc);
+ if (!writeback_some_pages(&wbc, MAX_WRITEBACK_PAGES))
+ break;
min_pages -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
- if (wbc.nr_to_write > 0 || wbc.pages_skipped > 0) {
- /* Wrote less than expected */
- congestion_wait(WRITE, HZ/10);
- if (!wbc.encountered_congestion)
- break;
- }
}
}
@@ -625,7 +634,6 @@ static void wb_kupdate(unsigned long arg
.bdi = NULL,
.sync_mode = WB_SYNC_NONE,
.older_than_this = &oldest_jif,
- .nr_to_write = 0,
.nonblocking = 1,
.for_kupdate = 1,
.range_cyclic = 1,
@@ -640,15 +648,8 @@ static void wb_kupdate(unsigned long arg
global_page_state(NR_UNSTABLE_NFS) +
(inodes_stat.nr_inodes - inodes_stat.nr_unused);
while (nr_to_write > 0) {
- wbc.encountered_congestion = 0;
- wbc.nr_to_write = MAX_WRITEBACK_PAGES;
- writeback_inodes(&wbc);
- if (wbc.nr_to_write > 0) {
- if (wbc.encountered_congestion)
- congestion_wait(WRITE, HZ/10);
- else
- break; /* All the old data is written */
- }
+ if (!writeback_some_pages(&wbc, MAX_WRITEBACK_PAGES))
+ break;
nr_to_write -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
}
if (time_before(next_jif, jiffies + HZ))
--
next prev parent reply other threads:[~2008-01-15 12:48 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-15 12:36 [PATCH 00/13] writeback bug fixes and simplifications take 2 Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 18:33 ` Michael Rubin
2008-01-16 2:18 ` Fengguang Wu
2008-01-16 2:18 ` Fengguang Wu
2008-01-18 7:51 ` Michael Rubin
2008-01-18 8:27 ` Fengguang Wu
2008-01-18 8:27 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 01/13] writeback: revert 2e6883bdf49abd0e7f0d9b6297fc3be7ebb2250b Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 02/13] writeback: clear PAGECACHE_TAG_DIRTY for truncated page in block_write_full_page() Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 03/13] writeback: introduce writeback_control.more_io Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 04/13] writeback: introduce super_block.s_more_io_wait Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu [this message]
2008-01-15 12:36 ` [PATCH 05/13] writeback: merge duplicate code into writeback_some_pages() Fengguang Wu
2008-01-15 12:36 ` [PATCH 06/13] writeback: defer writeback on not-all-pages-written Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 07/13] writeback: defer writeback on locked inode Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 08/13] writeback: defer writeback on locked buffers Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 09/13] writeback: requeue_io() on redirtied inode Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-16 8:13 ` David Chinner
2008-01-17 4:22 ` Fengguang Wu
2008-01-17 4:22 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 10/13] writeback: introduce queue_dirty() Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 11/13] writeback: queue_dirty() on memory-backed bdi Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 12/13] writeback: remove redirty_tail() Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
2008-01-15 12:36 ` [PATCH 13/13] writeback: cleanup __sync_single_inode() Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=400401292.20625@ustc.edu.cn \
--to=wfg@mail.ustc.edu.cn \
--cc=akpm@osdl.org \
--cc=mrubin@google.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.