diff options
author | Robert Love <rlove@google.com> | 2008-10-14 10:00:47 -0400 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2011-06-14 09:08:46 -0700 |
commit | 6a4e6432fc9e6e00cf295987c4e5e19d4d5bd9cd (patch) | |
tree | b025a6c6aa702c803cc5c0eb0fa5c8c093141cd3 /mm/shmem.c | |
parent | a7f1281e92dd98063bbeec925f4cd83e2bfcbd39 (diff) | |
download | kernel_samsung_crespo-6a4e6432fc9e6e00cf295987c4e5e19d4d5bd9cd.zip kernel_samsung_crespo-6a4e6432fc9e6e00cf295987c4e5e19d4d5bd9cd.tar.gz kernel_samsung_crespo-6a4e6432fc9e6e00cf295987c4e5e19d4d5bd9cd.tar.bz2 |
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.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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; } |