--- /var/tmp/portage/sys-fs/aufs3-3_p20140310/temp/aufs3-standalone/aufs3-mmap.patch 2014-03-31 14:44:04.817427553 +0200 +++ diff 2014-03-31 18:12:46.645626631 +0200 @@ -1,10 +1,7 @@ -aufs3.13 mmap patch - -diff --git a/fs/buffer.c b/fs/buffer.c -index 6024877..95bbf13 100644 ---- a/fs/buffer.c -+++ b/fs/buffer.c -@@ -2446,7 +2446,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, +diff -rU3 a/fs/buffer.c b/fs/buffer.c +--- a/fs/buffer.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/fs/buffer.c 2014-03-31 17:58:47.165612994 +0200 +@@ -2446,7 +2446,7 @@ * Update file times before taking page lock. We may end up failing the * fault so this update may be superfluous but who really cares... */ @@ -13,11 +10,10 @@ ret = __block_page_mkwrite(vma, vmf, get_block); sb_end_pagefault(sb); -diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c -index 5f9bc8a..9ea6c3a 100644 ---- a/fs/proc/nommu.c -+++ b/fs/proc/nommu.c -@@ -45,7 +45,9 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region) +diff -rU3 a/fs/proc/nommu.c b/fs/proc/nommu.c +--- a/fs/proc/nommu.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/fs/proc/nommu.c 2014-03-31 17:58:47.165612994 +0200 +@@ -45,7 +45,9 @@ file = region->vm_file; if (file) { @@ -28,11 +24,10 @@ dev = inode->i_sb->s_dev; ino = inode->i_ino; } -diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index fb52b54..1aca72e 100644 ---- a/fs/proc/task_mmu.c -+++ b/fs/proc/task_mmu.c -@@ -264,7 +264,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +diff -rU3 a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c +--- a/fs/proc/task_mmu.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/fs/proc/task_mmu.c 2014-03-31 17:58:47.169613106 +0200 +@@ -288,7 +288,9 @@ const char *name = NULL; if (file) { @@ -43,19 +38,18 @@ dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; -@@ -1407,6 +1409,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) - seq_printf(m, "%08lx %s", vma->vm_start, buffer); +@@ -1469,6 +1471,7 @@ + #endif if (file) { + file = vma_pr_or_file(vma); seq_printf(m, " file="); - seq_path(m, &file->f_path, "\n\t= "); + seq_path(m, &file->f_path, "\n\t\\= "); } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) { -diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c -index 678455d..ad0ce45 100644 ---- a/fs/proc/task_nommu.c -+++ b/fs/proc/task_nommu.c -@@ -141,7 +141,9 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, +diff -rU3 a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c +--- a/fs/proc/task_nommu.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/fs/proc/task_nommu.c 2014-03-31 17:58:47.169613106 +0200 +@@ -141,7 +141,9 @@ file = vma->vm_file; if (file) { @@ -66,10 +60,9 @@ dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; -diff --git a/include/linux/mm.h b/include/linux/mm.h -index 3552717..3c5a972 100644 ---- a/include/linux/mm.h -+++ b/include/linux/mm.h +diff -rU3 a/include/linux/mm.h b/include/linux/mm.h +--- a/include/linux/mm.h 2014-03-31 18:07:10.000000000 +0200 ++++ b/include/linux/mm.h 2014-03-31 18:03:16.705617605 +0200 @@ -17,6 +17,9 @@ #include #include @@ -80,7 +73,7 @@ struct mempolicy; struct anon_vma; -@@ -1101,6 +1104,87 @@ static inline int fixup_user_fault(struct task_struct *tsk, +@@ -1110,6 +1113,87 @@ } #endif @@ -165,14 +158,13 @@ +#define vma_get_file(vma) vma_do_get_file(vma, __func__, __LINE__) +#define vma_fput(vma) vma_do_fput(vma, __func__, __LINE__) + - extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); - extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, - void *buf, int len, int write); -diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index 290901a..c21588b 100644 ---- a/include/linux/mm_types.h -+++ b/include/linux/mm_types.h -@@ -231,6 +231,7 @@ struct vm_region { + extern ssize_t access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, size_t len, int write); + extern ssize_t access_remote_vm(struct mm_struct *mm, unsigned long addr, + void *buf, size_t len, int write); +diff -rU3 a/include/linux/mm_types.h b/include/linux/mm_types.h +--- a/include/linux/mm_types.h 2014-03-31 18:07:10.000000000 +0200 ++++ b/include/linux/mm_types.h 2014-03-31 17:58:47.169613106 +0200 +@@ -231,6 +231,7 @@ unsigned long vm_top; /* region allocated to here */ unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ struct file *vm_file; /* the backing file or NULL */ @@ -180,7 +172,7 @@ int vm_usage; /* region usage count (access under nommu_region_sem) */ bool vm_icache_flushed : 1; /* true if the icache has been flushed for -@@ -299,6 +300,7 @@ struct vm_area_struct { +@@ -299,6 +300,7 @@ unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; /* File we map to (can be NULL). */ @@ -188,24 +180,22 @@ void * vm_private_data; /* was vm_pte (shared mem) */ #ifndef CONFIG_MMU -diff --git a/kernel/fork.c b/kernel/fork.c -index dfa736c..02abdb6 100644 ---- a/kernel/fork.c -+++ b/kernel/fork.c -@@ -412,7 +412,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) - struct inode *inode = file_inode(file); - struct address_space *mapping = file->f_mapping; - -- get_file(file); -+ vma_get_file(tmp); - if (tmp->vm_flags & VM_DENYWRITE) - atomic_dec(&inode->i_writecount); - mutex_lock(&mapping->i_mmap_mutex); -diff --git a/mm/filemap.c b/mm/filemap.c -index b7749a9..a6693ca 100644 ---- a/mm/filemap.c -+++ b/mm/filemap.c -@@ -1735,7 +1735,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) +diff -rU3 a/kernel/fork.c b/kernel/fork.c +--- a/kernel/fork.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/kernel/fork.c 2014-03-31 18:05:22.205619243 +0200 +@@ -379,7 +379,7 @@ + struct inode *inode = file_inode(file); + struct address_space *mapping = file->f_mapping; + +- get_file(file); ++ vma_get_file(tmp); + if (tmp->vm_flags & VM_DENYWRITE) + atomic_dec(&inode->i_writecount); + mutex_lock(&mapping->i_mmap_mutex); +diff -rU3 a/mm/filemap.c b/mm/filemap.c +--- a/mm/filemap.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/filemap.c 2014-03-31 17:58:47.173613295 +0200 +@@ -1735,7 +1735,7 @@ int ret = VM_FAULT_LOCKED; sb_start_pagefault(inode->i_sb); @@ -214,11 +204,10 @@ lock_page(page); if (page->mapping != inode->i_mapping) { unlock_page(page); -diff --git a/mm/fremap.c b/mm/fremap.c -index bbc4d66..7deee2c 100644 ---- a/mm/fremap.c -+++ b/mm/fremap.c -@@ -211,7 +211,9 @@ get_write_lock: +diff -rU3 a/mm/fremap.c b/mm/fremap.c +--- a/mm/fremap.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/fremap.c 2014-03-31 17:58:47.173613295 +0200 +@@ -216,7 +216,9 @@ /* mmap_region may free vma; grab the info now */ vm_flags = vma->vm_flags; @@ -228,11 +217,10 @@ fput(file); if (IS_ERR_VALUE(addr)) { err = addr; -diff --git a/mm/madvise.c b/mm/madvise.c -index 539eeb9..5e700b1 100644 ---- a/mm/madvise.c -+++ b/mm/madvise.c -@@ -327,12 +327,12 @@ static long madvise_remove(struct vm_area_struct *vma, +diff -rU3 a/mm/madvise.c b/mm/madvise.c +--- a/mm/madvise.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/madvise.c 2014-03-31 17:58:47.173613295 +0200 +@@ -358,12 +358,12 @@ * vma's reference to the file) can go away as soon as we drop * mmap_sem. */ @@ -247,11 +235,10 @@ down_read(¤t->mm->mmap_sem); return error; } -diff --git a/mm/memory.c b/mm/memory.c -index 6768ce9..22d2cec 100644 ---- a/mm/memory.c -+++ b/mm/memory.c -@@ -2752,7 +2752,7 @@ reuse: +diff -rU3 a/mm/memory.c b/mm/memory.c +--- a/mm/memory.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/memory.c 2014-03-31 17:58:47.173613295 +0200 +@@ -2948,7 +2948,7 @@ set_page_dirty_balance(dirty_page, page_mkwrite); /* file_update_time outside page_lock */ if (vma->vm_file) @@ -260,7 +247,7 @@ } put_page(dirty_page); if (page_mkwrite) { -@@ -3463,7 +3463,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3666,7 +3666,7 @@ /* file_update_time outside page_lock */ if (vma->vm_file && !page_mkwrite) @@ -269,11 +256,10 @@ } else { unlock_page(vmf.page); if (anon) -diff --git a/mm/mmap.c b/mm/mmap.c -index 834b2d7..91f5699 100644 ---- a/mm/mmap.c -+++ b/mm/mmap.c -@@ -248,7 +248,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) +diff -rU3 a/mm/mmap.c b/mm/mmap.c +--- a/mm/mmap.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/mmap.c 2014-03-31 18:04:13.353619669 +0200 +@@ -270,7 +270,7 @@ if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) @@ -282,7 +268,7 @@ mpol_put(vma_policy(vma)); kmem_cache_free(vm_area_cachep, vma); return next; -@@ -858,7 +858,7 @@ again: remove_next = 1 + (end > next->vm_end); +@@ -881,7 +881,7 @@ if (remove_next) { if (file) { uprobe_munmap(next, next->vm_start, next->vm_end); @@ -291,7 +277,7 @@ } if (next->anon_vma) anon_vma_merge(vma, next); -@@ -1620,8 +1620,8 @@ out: +@@ -1790,8 +1790,8 @@ unmap_and_free_vma: if (vm_flags & VM_DENYWRITE) allow_write_access(file); @@ -301,7 +287,7 @@ /* Undo any partial mapping done by a device driver. */ unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); -@@ -2410,7 +2410,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2818,7 +2818,7 @@ goto out_free_mpol; if (new->vm_file) @@ -310,16 +296,16 @@ if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); -@@ -2429,7 +2429,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2869,7 +2869,7 @@ if (new->vm_ops && new->vm_ops->close) new->vm_ops->close(new); if (new->vm_file) - fput(new->vm_file); + vma_fput(new); - unlink_anon_vmas(new); out_free_mpol: mpol_put(vma_policy(new)); -@@ -2827,7 +2827,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, + out_free_vma: +@@ -3341,7 +3341,7 @@ if (anon_vma_clone(new_vma, vma)) goto out_free_mempol; if (new_vma->vm_file) @@ -328,11 +314,10 @@ if (new_vma->vm_ops && new_vma->vm_ops->open) new_vma->vm_ops->open(new_vma); vma_link(mm, new_vma, prev, rb_link, rb_parent); -diff --git a/mm/msync.c b/mm/msync.c -index 632df45..02d770e 100644 ---- a/mm/msync.c -+++ b/mm/msync.c -@@ -80,10 +80,10 @@ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags) +diff -rU3 a/mm/msync.c b/mm/msync.c +--- a/mm/msync.c 2014-01-20 03:40:07.000000000 +0100 ++++ b/mm/msync.c 2014-03-31 17:58:47.177613316 +0200 +@@ -80,10 +80,10 @@ start = vma->vm_end; if ((flags & MS_SYNC) && file && (vma->vm_flags & VM_SHARED)) { @@ -345,11 +330,10 @@ if (error || start >= end) goto out; down_read(&mm->mmap_sem); -diff --git a/mm/nommu.c b/mm/nommu.c -index fec093a..b366e4c 100644 ---- a/mm/nommu.c -+++ b/mm/nommu.c -@@ -652,7 +652,7 @@ static void __put_nommu_region(struct vm_region *region) +diff -rU3 a/mm/nommu.c b/mm/nommu.c +--- a/mm/nommu.c 2014-03-31 18:07:10.000000000 +0200 ++++ b/mm/nommu.c 2014-03-31 17:58:47.177613316 +0200 +@@ -651,7 +651,7 @@ up_write(&nommu_region_sem); if (region->vm_file) @@ -358,7 +342,7 @@ /* IO memory and memory shared directly out of the pagecache * from ramfs/tmpfs mustn't be released here */ -@@ -810,7 +810,7 @@ static void delete_vma(struct mm_struct *mm, struct vm_area_struct *vma) +@@ -809,7 +809,7 @@ if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) @@ -367,7 +351,7 @@ put_nommu_region(vma->vm_region); kmem_cache_free(vm_area_cachep, vma); } -@@ -1376,7 +1376,7 @@ unsigned long do_mmap_pgoff(struct file *file, +@@ -1366,7 +1366,7 @@ goto error_just_free; } } @@ -376,7 +360,7 @@ kmem_cache_free(vm_region_jar, region); region = pregion; result = start; -@@ -1452,10 +1452,10 @@ error_just_free: +@@ -1442,10 +1442,10 @@ up_write(&nommu_region_sem); error: if (region->vm_file)