---

 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,

_