All of lore.kernel.org
 help / color / mirror / Atom feed
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 06/13] writeback: defer writeback on not-all-pages-written
Date: Tue, 15 Jan 2008 20:36:43 +0800	[thread overview]
Message-ID: <400401292.17900@ustc.edu.cn> (raw)
Message-ID: <20080115124800.190056249@mail.ustc.edu.cn> (raw)
In-Reply-To: 20080115123637.518924046@mail.ustc.edu.cn

[-- Attachment #1: writeback-more_io_wait-a.patch --]
[-- Type: text/plain, Size: 2451 bytes --]

Convert to requeue_io_wait() for case:

	- kupdate cannot write all pages due to some blocking condition;
	- during sync, a file is being written to too fast, starving other
	  files.

In the case of sync, requeue_io_wait() can break the starvation because the
inode requeued into s_more_io_wait will be served _after_ normal inodes, hence
won't stand in the way of other inodes in the next run.

Cc: Michael Rubin <mrubin@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn>
---
 fs/fs-writeback.c |   33 ++++++++-------------------------
 1 files changed, 8 insertions(+), 25 deletions(-)

--- linux-mm.orig/fs/fs-writeback.c
+++ linux-mm/fs/fs-writeback.c
@@ -275,37 +275,20 @@ __sync_single_inode(struct inode *inode,
 		    mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) {
 			/*
 			 * We didn't write back all the pages.  nfs_writepages()
-			 * sometimes bales out without doing anything. Redirty
-			 * the inode; Move it from s_io onto s_more_io/s_dirty.
+			 * sometimes bales out without doing anything.
 			 */
-			/*
-			 * akpm: if the caller was the kupdate function we put
-			 * this inode at the head of s_dirty so it gets first
-			 * consideration.  Otherwise, move it to the tail, for
-			 * the reasons described there.  I'm not really sure
-			 * how much sense this makes.  Presumably I had a good
-			 * reasons for doing it this way, and I'd rather not
-			 * muck with it at present.
-			 */
-			if (wbc->for_kupdate) {
+			inode->i_state |= I_DIRTY_PAGES;
+			if (wbc->for_kupdate && wbc->nr_to_write <= 0)
 				/*
-				 * For the kupdate function we move the inode
-				 * to s_more_io so it will get more writeout as
-				 * soon as the queue becomes uncongested.
+				 * slice used up: queue for next turn
 				 */
-				inode->i_state |= I_DIRTY_PAGES;
 				requeue_io(inode);
-			} else {
+			else
 				/*
-				 * Otherwise fully redirty the inode so that
-				 * other inodes on this superblock will get some
-				 * writeout.  Otherwise heavy writing to one
-				 * file would indefinitely suspend writeout of
-				 * all the other files.
+				 * 1) somehow blocked in kupdate: retry later
+				 * 2) fast writer during sync: give others a try
 				 */
-				inode->i_state |= I_DIRTY_PAGES;
-				redirty_tail(inode);
-			}
+				requeue_io_wait(inode);
 		} else if (inode->i_state & I_DIRTY) {
 			/*
 			 * Someone redirtied the inode while were writing back

-- 

  parent reply	other threads:[~2008-01-15 12:52 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 ` [PATCH 05/13] writeback: merge duplicate code into writeback_some_pages() Fengguang Wu
2008-01-15 12:36   ` Fengguang Wu
2008-01-15 12:36 ` Fengguang Wu [this message]
2008-01-15 12:36   ` [PATCH 06/13] writeback: defer writeback on not-all-pages-written 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.17900@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.