diff options
author | Wu Fengguang <fengguang.wu@intel.com> | 2010-12-21 17:24:21 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-22 19:43:33 -0800 |
commit | d153ba64450b9371158c6516d6cac120faace44c (patch) | |
tree | 78bb90ade76b84312e1e332a02021eb8eb1cda42 | |
parent | f06328d7721ad3852c45eb2a10a0c8f9439b5f33 (diff) | |
download | op-kernel-dev-d153ba64450b9371158c6516d6cac120faace44c.zip op-kernel-dev-d153ba64450b9371158c6516d6cac120faace44c.tar.gz |
writeback: do uninterruptible sleep in balance_dirty_pages()
Using TASK_INTERRUPTIBLE in balance_dirty_pages() seems wrong. If it's
going to do that then it must break out if signal_pending(), otherwise
it's pretty much guaranteed to degenerate into a busywait loop. Plus we
*do* want these processes to appear in D state and to contribute to load
average.
So it should be TASK_UNINTERRUPTIBLE. -- Andrew Morton
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | mm/page-writeback.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index b840afa..b4edfe7 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -563,7 +563,7 @@ static void balance_dirty_pages(struct address_space *mapping, break; /* We've done our duty */ } trace_wbc_balance_dirty_wait(&wbc, bdi); - __set_current_state(TASK_INTERRUPTIBLE); + __set_current_state(TASK_UNINTERRUPTIBLE); io_schedule_timeout(pause); /* |