diff options
Diffstat (limited to 'mm/util.c')
| -rw-r--r-- | mm/util.c | 24 | 
1 files changed, 24 insertions, 0 deletions
diff --git a/mm/util.c b/mm/util.c index e7b103a6fd2..88ea1bd661c 100644 --- a/mm/util.c +++ b/mm/util.c @@ -6,6 +6,8 @@  #include <linux/sched.h>  #include <asm/uaccess.h> +#include "internal.h" +  #define CREATE_TRACE_POINTS  #include <trace/events/kmem.h> @@ -215,6 +217,28 @@ char *strndup_user(const char __user *s, long n)  }  EXPORT_SYMBOL(strndup_user); +void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma, +		struct vm_area_struct *prev, struct rb_node *rb_parent) +{ +	struct vm_area_struct *next; + +	vma->vm_prev = prev; +	if (prev) { +		next = prev->vm_next; +		prev->vm_next = vma; +	} else { +		mm->mmap = vma; +		if (rb_parent) +			next = rb_entry(rb_parent, +					struct vm_area_struct, vm_rb); +		else +			next = NULL; +	} +	vma->vm_next = next; +	if (next) +		next->vm_prev = vma; +} +  #if defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT)  void arch_pick_mmap_layout(struct mm_struct *mm)  {  |