diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page-writeback.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/mm/page-writeback.c b/mm/page-writeback.c index b3dbb8040ed5..bbd396ac9546 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c | |||
@@ -851,7 +851,22 @@ int write_cache_pages(struct address_space *mapping, | |||
851 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) | 851 | if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) |
852 | range_whole = 1; | 852 | range_whole = 1; |
853 | cycled = 1; /* ignore range_cyclic tests */ | 853 | cycled = 1; /* ignore range_cyclic tests */ |
854 | |||
855 | /* | ||
856 | * If this is a data integrity sync, cap the writeback to the | ||
857 | * current end of file. Any extension to the file that occurs | ||
858 | * after this is a new write and we don't need to write those | ||
859 | * pages out to fulfil our data integrity requirements. If we | ||
860 | * try to write them out, we can get stuck in this scan until | ||
861 | * the concurrent writer stops adding dirty pages and extending | ||
862 | * EOF. | ||
863 | */ | ||
864 | if (wbc->sync_mode == WB_SYNC_ALL && | ||
865 | wbc->range_end == LLONG_MAX) { | ||
866 | end = i_size_read(mapping->host) >> PAGE_CACHE_SHIFT; | ||
867 | } | ||
854 | } | 868 | } |
869 | |||
855 | retry: | 870 | retry: |
856 | done_index = index; | 871 | done_index = index; |
857 | while (!done && (index <= end)) { | 872 | while (!done && (index <= end)) { |