Messages in this thread | | | Date | Wed, 23 Nov 2011 11:16:47 -0800 (PST) | From | Hugh Dickins <> | Subject | Re: [PATCH 2/2] fs: wire up .truncate_range and .fallocate |
| |
On Wed, 23 Nov 2011, Christoph Hellwig wrote: > > It also seems like all fallocate implementaions for far got away > without the unmap_mapping_range, so either people didn't test them > hard enough, or tmpfs doesn't need it either. I fear the former > is true.
They're saved by the funny little one-by-one unmap_mapping_range() fallback in truncate_inode_page(). It's inefficient (in those rare cases when someone is punching a hole somewhere that's mapped) and we ought to do better, but we don't have an actual bug there.
Hugh
int truncate_inode_page(struct address_space *mapping, struct page *page) { if (page_mapped(page)) { unmap_mapping_range(mapping, (loff_t)page->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE, 0); } return truncate_complete_page(mapping, page); }
| |