Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.4.0-test12 /mm/mmap.c

Filename:/mm/mmap.c
Lines Added:10
Lines Deleted:7
Also changed in: (Previous) 2.4.0-test11  2.4.0-test10  2.4.0-test8  2.4.0-test7  2.4.0-test5  2.4.0-test3 
(Following) 2.4.0-prerelease  2.4.1-pre12  2.4.1  2.4.1-ac1  2.4.1-ac2  2.4.1-ac3 

Location
[  2.4.0-test12
  [  mm
     o  mmap.c

Patch

diff -u --recursive --new-file v2.4.0-test11/linux/mm/mmap.c linux/mm/mmap.c
--- v2.4.0-test11/linux/mm/mmap.c   Sun Nov 19 18:44:23 2000
+++ linux/mm/mmap.c   Mon Dec 11 12:37:05 2000
@@ -354,11 +354,11 @@
    lock_vma_mappings(vma);
    spin_lock(&mm->page_table_lock);
    __insert_vm_struct(mm, vma);
+   unlock_vma_mappings(vma);
    if (correct_wcount)
       atomic_inc(&file->f_dentry->d_inode->i_writecount);
    merge_segments(mm, vma->vm_start, vma->vm_end);
    spin_unlock(&mm->page_table_lock);
-   unlock_vma_mappings(vma);
    
    mm->total_vm += len >> PAGE_SHIFT;
    if (flags & VM_LOCKED) {
@@ -858,9 +858,9 @@
    lock_vma_mappings(vma);
    spin_lock(&mm->page_table_lock);
    __insert_vm_struct(mm, vma);
+   unlock_vma_mappings(vma);
    merge_segments(mm, vma->vm_start, vma->vm_end);
    spin_unlock(&mm->page_table_lock);
-   unlock_vma_mappings(vma);
    
    mm->total_vm += len >> PAGE_SHIFT;
    if (flags & VM_LOCKED) {
@@ -1034,20 +1034,23 @@
          avl_remove(mpnt, &mm->mmap_avl);
       prev->vm_end = mpnt->vm_end;
       prev->vm_next = mpnt->vm_next;
+      mm->map_count--;
       if (mpnt->vm_ops && mpnt->vm_ops->close) {
          mpnt->vm_pgoff += (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
          mpnt->vm_start = mpnt->vm_end;
          spin_unlock(&mm->page_table_lock);
-         unlock_vma_mappings(mpnt);
          mpnt->vm_ops->close(mpnt);
-         lock_vma_mappings(mpnt);
-         spin_lock(&mm->page_table_lock);
-      }
-      mm->map_count--;
+      } else
+         spin_unlock(&mm->page_table_lock);
+
+      lock_vma_mappings(mpnt);
       __remove_shared_vm_struct(mpnt);
+      unlock_vma_mappings(mpnt);
       if (mpnt->vm_file)
          fput(mpnt->vm_file);
       kmem_cache_free(vm_area_cachep, mpnt);
       mpnt = prev;
+
+      spin_lock(&mm->page_table_lock);
    }
 }


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.