summaryrefslogtreecommitdiffstats
path: root/drivers/mmc/core
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2010-08-11 23:17:44 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-12 17:43:30 +0200
commit81d73a32d775ae9674ea6edf0b5b721fc3bc57d9 (patch)
treec4097c3c7715a128cf54252b2ff906d3d8946ae0 /drivers/mmc/core
parentwriteback: merge for_kupdate and !for_kupdate cases (diff)
downloadlinux-81d73a32d775ae9674ea6edf0b5b721fc3bc57d9.tar.xz
linux-81d73a32d775ae9674ea6edf0b5b721fc3bc57d9.zip
mm: fix writeback_in_progress()
Commit 83ba7b071f3 ("writeback: simplify the write back thread queue") broke writeback_in_progress() as in that commit we started to remove work items from the list at the moment we start working on them and not at the moment they are finished. Thus if the flusher thread was doing some work but there was no other work queued, writeback_in_progress() returned false. This could in particular cause unnecessary queueing of background writeback from balance_dirty_pages() or writeout work from writeback_sb_if_idle(). This patch fixes the problem by introducing a bit in the bdi state which indicates that the flusher thread is processing some work and uses this bit for writeback_in_progress() test. NOTE: Both callsites of writeback_in_progress() (namely, writeback_inodes_sb_if_idle() and balance_dirty_pages()) would actually need a different information than what writeback_in_progress() provides. They would need to know whether *the kind of writeback they are going to submit* is already queued. But this information isn't that simple to provide so let's fix writeback_in_progress() for the time being. Signed-off-by: Jan Kara <jack@suse.cz> Cc: Christoph Hellwig <hch@lst.de> Cc: Wu Fengguang <fengguang.wu@intel.com> Acked-by: Jens Axboe <jaxboe@fusionio.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/mmc/core')
0 files changed, 0 insertions, 0 deletions