diff -purN -X /home/mbligh/.diff.exclude 863-vgtod3/mm/mmap.c 870-objrmap_fixes/mm/mmap.c --- 863-vgtod3/mm/mmap.c 2004-03-14 09:50:14.000000000 -0800 +++ 870-objrmap_fixes/mm/mmap.c 2004-03-14 10:01:35.000000000 -0800 @@ -1285,8 +1285,8 @@ int do_munmap(struct mm_struct *mm, unsi /* * Remove the vma's, and unmap the actual pages */ - detach_vmas_to_be_unmapped(mm, mpnt, prev, end); spin_lock(&mm->page_table_lock); + detach_vmas_to_be_unmapped(mm, mpnt, prev, end); unmap_region(mm, mpnt, prev, start, end); spin_unlock(&mm->page_table_lock); diff -purN -X /home/mbligh/.diff.exclude 863-vgtod3/mm/rmap.c 870-objrmap_fixes/mm/rmap.c --- 863-vgtod3/mm/rmap.c 2004-03-14 09:50:14.000000000 -0800 +++ 870-objrmap_fixes/mm/rmap.c 2004-03-14 10:01:35.000000000 -0800 @@ -470,7 +470,7 @@ try_to_unmap_obj_one(struct vm_area_stru if (!pte) goto out; - if (vma->vm_flags & VM_LOCKED) { + if (vma->vm_flags & (VM_LOCKED|VM_RESERVED)) { ret = SWAP_FAIL; goto out_unmap; } diff -purN -X /home/mbligh/.diff.exclude 863-vgtod3/mm/swapfile.c 870-objrmap_fixes/mm/swapfile.c --- 863-vgtod3/mm/swapfile.c 2004-03-14 09:50:14.000000000 -0800 +++ 870-objrmap_fixes/mm/swapfile.c 2004-03-14 10:01:36.000000000 -0800 @@ -499,7 +499,6 @@ static int unuse_process(struct mm_struc /* * Go through process' page directory. */ - down_read(&mm->mmap_sem); spin_lock(&mm->page_table_lock); for (vma = mm->mmap; vma; vma = vma->vm_next) { pgd_t * pgd = pgd_offset(mm, vma->vm_start); @@ -507,7 +506,6 @@ static int unuse_process(struct mm_struc break; } spin_unlock(&mm->page_table_lock); - up_read(&mm->mmap_sem); pte_chain_free(pte_chain); return 0; }