diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-09-24 14:03:37 +0200 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-09-24 14:03:37 +0200 |
commit | 73e6d6c6467771838c1fc6949e6768a12ed72464 (patch) | |
tree | 94dd60891869a0a275cd332c4e675cf0b101fcfa /mm/page-writeback.c | |
parent | 12e5272585901217e919da810c801e5084ee0cb1 (diff) | |
parent | a850ea30374ebed32a0724742601861853fde869 (diff) | |
download | kernel_replicant_linux-73e6d6c6467771838c1fc6949e6768a12ed72464.tar.gz kernel_replicant_linux-73e6d6c6467771838c1fc6949e6768a12ed72464.tar.bz2 kernel_replicant_linux-73e6d6c6467771838c1fc6949e6768a12ed72464.zip |
Merge branch 'master' into upstream
Diffstat (limited to 'mm/page-writeback.c')
-rw-r--r-- | mm/page-writeback.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 7262aacea8a2..e3bccac1f025 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -836,7 +836,8 @@ void tag_pages_for_writeback(struct address_space *mapping, spin_unlock_irq(&mapping->tree_lock); WARN_ON_ONCE(tagged > WRITEBACK_TAG_BATCH); cond_resched(); - } while (tagged >= WRITEBACK_TAG_BATCH); + /* We check 'start' to handle wrapping when end == ~0UL */ + } while (tagged >= WRITEBACK_TAG_BATCH && start); } EXPORT_SYMBOL(tag_pages_for_writeback); @@ -984,22 +985,16 @@ continue_unlock: } } - if (wbc->nr_to_write > 0) { - if (--wbc->nr_to_write == 0 && - wbc->sync_mode == WB_SYNC_NONE) { - /* - * We stop writing back only if we are - * not doing integrity sync. In case of - * integrity sync we have to keep going - * because someone may be concurrently - * dirtying pages, and we might have - * synced a lot of newly appeared dirty - * pages, but have not synced all of the - * old dirty pages. - */ - done = 1; - break; - } + /* + * We stop writing back only if we are not doing + * integrity sync. In case of integrity sync we have to + * keep going until we have written all the pages + * we tagged for writeback prior to entering this loop. + */ + if (--wbc->nr_to_write <= 0 && + wbc->sync_mode == WB_SYNC_NONE) { + done = 1; + break; } } pagevec_release(&pvec); @@ -1131,6 +1126,7 @@ void account_page_dirtied(struct page *page, struct address_space *mapping) task_io_account_write(PAGE_CACHE_SIZE); } } +EXPORT_SYMBOL(account_page_dirtied); /* * For address_spaces which do not use buffers. Just tag the page as dirty in |