summaryrefslogtreecommitdiff
path: root/mm/shmem.c
diff options
context:
space:
mode:
authorRobert Love <rlove@google.com>2008-10-14 10:00:47 -0400
committerColin Cross <ccross@android.com>2011-06-14 09:08:46 -0700
commit6a4e6432fc9e6e00cf295987c4e5e19d4d5bd9cd (patch)
treeb025a6c6aa702c803cc5c0eb0fa5c8c093141cd3 /mm/shmem.c
parenta7f1281e92dd98063bbeec925f4cd83e2bfcbd39 (diff)
ashmem for 2.6.27.
Forward port of ashmem to 2.6.27. Signed-off-by: Robert Love <rlove@google.com> ashmem: Don't install fault handler for private mmaps. Ashmem is used to create named private heaps. If this heap is backed by a tmpfs file it will allocate two pages for every page touched. In 2.6.27, the extra page would later be freed, but 2.6.29 does not scan anonymous pages when running without swap so the memory is not freed while the file is referenced. This change changes the behavior of private ashmem mmaps to match /dev/zero instead tmpfs. Signed-off-by: Arve Hjønnevåg <arve@android.com> ashmem: Add common prefix to name reported in /proc/pid/maps Signed-off-by: Arve Hjønnevåg <arve@android.com> ashmem: don't require a page aligned size This makes ashmem more similar to shmem and mmap, by not requiring the specified size to be page aligned, instead rounding it internally as needed. Signed-off-by: Marco Nelissen <marcone@android.com>
Diffstat (limited to 'mm/shmem.c')
-rw-r--r--mm/shmem.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/mm/shmem.c b/mm/shmem.c
index d221a1cfd7b..966e2b31fc6 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -3008,6 +3008,15 @@ put_memory:
}
EXPORT_SYMBOL_GPL(shmem_file_setup);
+void shmem_set_file(struct vm_area_struct *vma, struct file *file)
+{
+ if (vma->vm_file)
+ fput(vma->vm_file);
+ vma->vm_file = file;
+ vma->vm_ops = &shmem_vm_ops;
+ vma->vm_flags |= VM_CAN_NONLINEAR;
+}
+
/**
* shmem_zero_setup - setup a shared anonymous mapping
* @vma: the vma to be mmapped is prepared by do_mmap_pgoff
@@ -3021,10 +3030,6 @@ int shmem_zero_setup(struct vm_area_struct *vma)
if (IS_ERR(file))
return PTR_ERR(file);
- if (vma->vm_file)
- fput(vma->vm_file);
- vma->vm_file = file;
- vma->vm_ops = &shmem_vm_ops;
- vma->vm_flags |= VM_CAN_NONLINEAR;
+ shmem_set_file(vma, file);
return 0;
}