diff options
| -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)) { |
