Commit 5a3d5c98 authored by Nick Piggin's avatar Nick Piggin Committed by Linus Torvalds

mm: write_cache_pages cleanups

Get rid of some complex expressions from flow control statements, add a
comment, remove some duplicate code.
Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Dave Chinner <david@fromorbit.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 05fe478d
...@@ -899,11 +899,14 @@ int write_cache_pages(struct address_space *mapping, ...@@ -899,11 +899,14 @@ int write_cache_pages(struct address_space *mapping,
} }
retry: retry:
done_index = index; done_index = index;
while (!done && (index <= end) && while (!done && (index <= end)) {
(nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, int i;
PAGECACHE_TAG_DIRTY,
min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1))) { nr_pages = pagevec_lookup_tag(&pvec, mapping, &index,
unsigned i; PAGECACHE_TAG_DIRTY,
min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1);
if (nr_pages == 0)
break;
for (i = 0; i < nr_pages; i++) { for (i = 0; i < nr_pages; i++) {
struct page *page = pvec.pages[i]; struct page *page = pvec.pages[i];
...@@ -919,7 +922,16 @@ int write_cache_pages(struct address_space *mapping, ...@@ -919,7 +922,16 @@ int write_cache_pages(struct address_space *mapping,
*/ */
lock_page(page); lock_page(page);
/*
* Page truncated or invalidated. We can freely skip it
* then, even for data integrity operations: the page
* has disappeared concurrently, so there could be no
* real expectation of this data interity operation
* even if there is now a new, dirty page at the same
* pagecache address.
*/
if (unlikely(page->mapping != mapping)) { if (unlikely(page->mapping != mapping)) {
continue_unlock:
unlock_page(page); unlock_page(page);
continue; continue;
} }
...@@ -930,18 +942,15 @@ int write_cache_pages(struct address_space *mapping, ...@@ -930,18 +942,15 @@ int write_cache_pages(struct address_space *mapping,
* end == -1 in that case. * end == -1 in that case.
*/ */
done = 1; done = 1;
unlock_page(page); goto continue_unlock;
continue;
} }
if (wbc->sync_mode != WB_SYNC_NONE) if (wbc->sync_mode != WB_SYNC_NONE)
wait_on_page_writeback(page); wait_on_page_writeback(page);
if (PageWriteback(page) || if (PageWriteback(page) ||
!clear_page_dirty_for_io(page)) { !clear_page_dirty_for_io(page))
unlock_page(page); goto continue_unlock;
continue;
}
ret = (*writepage)(page, wbc, data); ret = (*writepage)(page, wbc, data);
if (unlikely(ret)) { if (unlikely(ret)) {
...@@ -964,7 +973,8 @@ int write_cache_pages(struct address_space *mapping, ...@@ -964,7 +973,8 @@ int write_cache_pages(struct address_space *mapping,
} }
if (wbc->sync_mode == WB_SYNC_NONE) { if (wbc->sync_mode == WB_SYNC_NONE) {
if (--wbc->nr_to_write <= 0) wbc->nr_to_write--;
if (wbc->nr_to_write <= 0)
done = 1; done = 1;
} }
if (wbc->nonblocking && bdi_write_congested(bdi)) { if (wbc->nonblocking && bdi_write_congested(bdi)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment