This isfor test coverage of nonlinear mappings.

- Force all PROT_EXEC file mmappings to be nonlinear.

- Force _all_ file-backed mappings to be treated as nonlinear after they
  are unmapped.




 mm/fremap.c |    2 +-
 mm/mmap.c   |    6 ++++--
 mm/rmap.c   |    2 +-
 3 files changed, 6 insertions(+), 4 deletions(-)

diff -puN mm/mmap.c~fremap-all-mappings mm/mmap.c
--- 25/mm/mmap.c~fremap-all-mappings	2003-03-14 20:28:46.000000000 -0800
+++ 25-akpm/mm/mmap.c	2003-03-14 20:28:46.000000000 -0800
@@ -714,9 +714,11 @@ out:	
 		mm->locked_vm += len >> PAGE_SHIFT;
 		make_pages_present(addr, addr + len);
 	}
-	if (flags & MAP_POPULATE) {
+	if ((file && (prot & PROT_EXEC)) || (flags & MAP_POPULATE)) {
+		int err;
+
 		up_write(&mm->mmap_sem);
-		sys_remap_file_pages(addr, len, prot,
+		err = sys_remap_file_pages(addr, len, prot & 0,
 					pgoff, flags & MAP_NONBLOCK);
 		down_write(&mm->mmap_sem);
 	}
diff -puN mm/rmap.c~fremap-all-mappings mm/rmap.c
--- 25/mm/rmap.c~fremap-all-mappings	2003-03-14 20:28:46.000000000 -0800
+++ 25-akpm/mm/rmap.c	2003-03-14 20:28:46.000000000 -0800
@@ -383,7 +383,7 @@ static int try_to_unmap_one(struct page 
 		pgidx = (address - vma->vm_start) >> PAGE_SHIFT;
 		pgidx += vma->vm_pgoff;
 		pgidx >>= PAGE_CACHE_SHIFT - PAGE_SHIFT;
-		if (page->index != pgidx) {
+		if (1 || page->index != pgidx) {
 			set_pte(ptep, pgoff_to_pte(page->index));
 			BUG_ON(!pte_file(*ptep));
 		}
diff -puN mm/fremap.c~fremap-all-mappings mm/fremap.c
--- 25/mm/fremap.c~fremap-all-mappings	2003-03-14 20:28:46.000000000 -0800
+++ 25-akpm/mm/fremap.c	2003-03-14 20:28:46.000000000 -0800
@@ -147,7 +147,7 @@ int sys_remap_file_pages(unsigned long s
 	 * and that the remapped range is valid and fully within
 	 * the single existing vma:
 	 */
-	if (vma && (vma->vm_flags & VM_SHARED) &&
+	if (vma && /*(vma->vm_flags & VM_SHARED) && */
 		vma->vm_ops && vma->vm_ops->populate &&
 			end > start && start >= vma->vm_start &&
 				end <= vma->vm_end)

_