File systems who don't use buffer-heads must not suffer from the lack of ->invalidatepage_range() adress_space operation. The logic of partial start/end truncation already implemented in truncate_inode_pages_range() must suffice for them.
https://jira.sw.ru/browse/PSBM-50629 Signed-off-by: Maxim Patlasov <[email protected]> --- mm/truncate.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mm/truncate.c b/mm/truncate.c index 8dcfe94..cc852aa 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -274,6 +274,7 @@ void truncate_inode_pages_range(struct address_space *mapping, pgoff_t indices[PAGEVEC_SIZE]; pgoff_t index; int i; + int bug_if_page_has_bh = 0; cleancache_invalidate_inode(mapping); if (mapping->nrpages == 0 && mapping->nrshadows == 0) @@ -283,7 +284,7 @@ void truncate_inode_pages_range(struct address_space *mapping, partial_start = lstart & (PAGE_CACHE_SIZE - 1); partial_end = (lend + 1) & (PAGE_CACHE_SIZE - 1); if (!inode_has_invalidate_range(mapping->host)) - BUG_ON(partial_end); + bug_if_page_has_bh = 1; /* * 'start' and 'end' always covers the range of pages to be fully @@ -368,9 +369,11 @@ void truncate_inode_pages_range(struct address_space *mapping, wait_on_page_writeback(page); zero_user_segment(page, 0, partial_end); cleancache_invalidate_page(mapping, page); - if (page_has_private(page)) + if (page_has_private(page)) { + BUG_ON(bug_if_page_has_bh); do_invalidatepage_range(page, 0, partial_end); + } unlock_page(page); page_cache_release(page); } _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
