--- 25-akpm/mm/memory.c | 6 ++++++ 1 files changed, 6 insertions(+) diff -puN mm/memory.c~unmap_mapping_range-comment mm/memory.c --- 25/mm/memory.c~unmap_mapping_range-comment Mon May 10 15:29:32 2004 +++ 25-akpm/mm/memory.c Mon May 10 15:29:32 2004 @@ -1183,6 +1183,12 @@ void unmap_mapping_range(struct address_ if (unlikely(!prio_tree_empty(&mapping->i_mmap_shared))) unmap_mapping_range_list(&mapping->i_mmap_shared, &details); + /* + * In nonlinear VMAs there is no correspondence between virtual address + * offset and file offset. So we must perform an exhaustive search + * across *all* the pages in each nonlinear VMA, not just the pages + * whose virtual address lies outside the file truncation point. + */ if (unlikely(!list_empty(&mapping->i_mmap_nonlinear))) { struct vm_area_struct *vma; list_for_each_entry(vma, &mapping->i_mmap_nonlinear, _