diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:43:52 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:43:52 -0500 |
commit | 99cd7074891f87c49660e3b2880564324a4733ac (patch) | |
tree | 903d2665bcb445f1f265d1adf7a99f265bcefc15 /mm/mmap.c | |
parent | e8a9cbf6ae620d9e5ba9cb42001c033287a284a3 (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) |
Merge commit 'v2.6.29-rc1' into tracing/urgent
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -413,7 +413,7 @@ void __vma_link_rb(struct mm_struct *mm, struct vm_area_struct *vma, | |||
413 | 413 | ||
414 | static void __vma_link_file(struct vm_area_struct *vma) | 414 | static void __vma_link_file(struct vm_area_struct *vma) |
415 | { | 415 | { |
416 | struct file * file; | 416 | struct file *file; |
417 | 417 | ||
418 | file = vma->vm_file; | 418 | file = vma->vm_file; |
419 | if (file) { | 419 | if (file) { |
@@ -474,11 +474,10 @@ static void vma_link(struct mm_struct *mm, struct vm_area_struct *vma, | |||
474 | * insert vm structure into list and rbtree and anon_vma, | 474 | * insert vm structure into list and rbtree and anon_vma, |
475 | * but it has already been inserted into prio_tree earlier. | 475 | * but it has already been inserted into prio_tree earlier. |
476 | */ | 476 | */ |
477 | static void | 477 | static void __insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma) |
478 | __insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma) | ||
479 | { | 478 | { |
480 | struct vm_area_struct * __vma, * prev; | 479 | struct vm_area_struct *__vma, *prev; |
481 | struct rb_node ** rb_link, * rb_parent; | 480 | struct rb_node **rb_link, *rb_parent; |
482 | 481 | ||
483 | __vma = find_vma_prepare(mm, vma->vm_start,&prev, &rb_link, &rb_parent); | 482 | __vma = find_vma_prepare(mm, vma->vm_start,&prev, &rb_link, &rb_parent); |
484 | BUG_ON(__vma && __vma->vm_start < vma->vm_end); | 483 | BUG_ON(__vma && __vma->vm_start < vma->vm_end); |
@@ -908,7 +907,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags, | |||
908 | * The caller must hold down_write(current->mm->mmap_sem). | 907 | * The caller must hold down_write(current->mm->mmap_sem). |
909 | */ | 908 | */ |
910 | 909 | ||
911 | unsigned long do_mmap_pgoff(struct file * file, unsigned long addr, | 910 | unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, |
912 | unsigned long len, unsigned long prot, | 911 | unsigned long len, unsigned long prot, |
913 | unsigned long flags, unsigned long pgoff) | 912 | unsigned long flags, unsigned long pgoff) |
914 | { | 913 | { |
@@ -1464,7 +1463,7 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, | |||
1464 | EXPORT_SYMBOL(get_unmapped_area); | 1463 | EXPORT_SYMBOL(get_unmapped_area); |
1465 | 1464 | ||
1466 | /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ | 1465 | /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ |
1467 | struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr) | 1466 | struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) |
1468 | { | 1467 | { |
1469 | struct vm_area_struct *vma = NULL; | 1468 | struct vm_area_struct *vma = NULL; |
1470 | 1469 | ||
@@ -1507,7 +1506,7 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr, | |||
1507 | struct vm_area_struct **pprev) | 1506 | struct vm_area_struct **pprev) |
1508 | { | 1507 | { |
1509 | struct vm_area_struct *vma = NULL, *prev = NULL; | 1508 | struct vm_area_struct *vma = NULL, *prev = NULL; |
1510 | struct rb_node * rb_node; | 1509 | struct rb_node *rb_node; |
1511 | if (!mm) | 1510 | if (!mm) |
1512 | goto out; | 1511 | goto out; |
1513 | 1512 | ||
@@ -1541,7 +1540,7 @@ out: | |||
1541 | * update accounting. This is shared with both the | 1540 | * update accounting. This is shared with both the |
1542 | * grow-up and grow-down cases. | 1541 | * grow-up and grow-down cases. |
1543 | */ | 1542 | */ |
1544 | static int acct_stack_growth(struct vm_area_struct * vma, unsigned long size, unsigned long grow) | 1543 | static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, unsigned long grow) |
1545 | { | 1544 | { |
1546 | struct mm_struct *mm = vma->vm_mm; | 1545 | struct mm_struct *mm = vma->vm_mm; |
1547 | struct rlimit *rlim = current->signal->rlim; | 1546 | struct rlimit *rlim = current->signal->rlim; |
@@ -2091,6 +2090,9 @@ void exit_mmap(struct mm_struct *mm) | |||
2091 | arch_exit_mmap(mm); | 2090 | arch_exit_mmap(mm); |
2092 | mmu_notifier_release(mm); | 2091 | mmu_notifier_release(mm); |
2093 | 2092 | ||
2093 | if (!mm->mmap) /* Can happen if dup_mmap() received an OOM */ | ||
2094 | return; | ||
2095 | |||
2094 | if (mm->locked_vm) { | 2096 | if (mm->locked_vm) { |
2095 | vma = mm->mmap; | 2097 | vma = mm->mmap; |
2096 | while (vma) { | 2098 | while (vma) { |
@@ -2103,7 +2105,7 @@ void exit_mmap(struct mm_struct *mm) | |||
2103 | lru_add_drain(); | 2105 | lru_add_drain(); |
2104 | flush_cache_mm(mm); | 2106 | flush_cache_mm(mm); |
2105 | tlb = tlb_gather_mmu(mm, 1); | 2107 | tlb = tlb_gather_mmu(mm, 1); |
2106 | /* Don't update_hiwater_rss(mm) here, do_exit already did */ | 2108 | /* update_hiwater_rss(mm) here? but nobody should be looking */ |
2107 | /* Use -1 here to ensure all VMAs in the mm are unmapped */ | 2109 | /* Use -1 here to ensure all VMAs in the mm are unmapped */ |
2108 | end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL); | 2110 | end = unmap_vmas(&tlb, vma, 0, -1, &nr_accounted, NULL); |
2109 | vm_unacct_memory(nr_accounted); | 2111 | vm_unacct_memory(nr_accounted); |
@@ -2470,3 +2472,13 @@ void mm_drop_all_locks(struct mm_struct *mm) | |||
2470 | 2472 | ||
2471 | mutex_unlock(&mm_all_locks_mutex); | 2473 | mutex_unlock(&mm_all_locks_mutex); |
2472 | } | 2474 | } |
2475 | |||
2476 | /* | ||
2477 | * initialise the VMA slab | ||
2478 | */ | ||
2479 | void __init mmap_init(void) | ||
2480 | { | ||
2481 | vm_area_cachep = kmem_cache_create("vm_area_struct", | ||
2482 | sizeof(struct vm_area_struct), 0, | ||
2483 | SLAB_PANIC, NULL); | ||
2484 | } | ||