aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorMichel Lespinasse <walken@google.com>2013-02-22 19:32:47 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-23 20:50:11 -0500
commit41badc15cbad0350de34408c1b0c690f9df76d4b (patch)
tree2545134398b99b37259bf6412a0bb56442f120fa /mm
parent1869305009857cdeaabe6283bcdc2359c5784543 (diff)
mm: make do_mmap_pgoff return populate as a size in bytes, not as a bool
do_mmap_pgoff() rounds up the desired size to the next PAGE_SIZE multiple, however there was no equivalent code in mm_populate(), which caused issues. This could be fixed by introduced the same rounding in mm_populate(), however I think it's preferable to make do_mmap_pgoff() return populate as a size rather than as a boolean, so we don't have to duplicate the size rounding logic in mm_populate(). Signed-off-by: Michel Lespinasse <walken@google.com> Acked-by: Rik van Riel <riel@redhat.com> Tested-by: Andy Lutomirski <luto@amacapital.net> Cc: Greg Ungerer <gregungerer@westnet.com.au> Cc: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/mmap.c6
-rw-r--r--mm/nommu.c4
-rw-r--r--mm/util.c6
3 files changed, 8 insertions, 8 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index 39a3944e1658..44bb4d869884 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1163,13 +1163,13 @@ static inline unsigned long round_hint_to_min(unsigned long hint)
1163unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, 1163unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
1164 unsigned long len, unsigned long prot, 1164 unsigned long len, unsigned long prot,
1165 unsigned long flags, unsigned long pgoff, 1165 unsigned long flags, unsigned long pgoff,
1166 bool *populate) 1166 unsigned long *populate)
1167{ 1167{
1168 struct mm_struct * mm = current->mm; 1168 struct mm_struct * mm = current->mm;
1169 struct inode *inode; 1169 struct inode *inode;
1170 vm_flags_t vm_flags; 1170 vm_flags_t vm_flags;
1171 1171
1172 *populate = false; 1172 *populate = 0;
1173 1173
1174 /* 1174 /*
1175 * Does the application expect PROT_READ to imply PROT_EXEC? 1175 * Does the application expect PROT_READ to imply PROT_EXEC?
@@ -1307,7 +1307,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
1307 1307
1308 addr = mmap_region(file, addr, len, vm_flags, pgoff); 1308 addr = mmap_region(file, addr, len, vm_flags, pgoff);
1309 if (!IS_ERR_VALUE(addr) && (vm_flags & VM_POPULATE)) 1309 if (!IS_ERR_VALUE(addr) && (vm_flags & VM_POPULATE))
1310 *populate = true; 1310 *populate = len;
1311 return addr; 1311 return addr;
1312} 1312}
1313 1313
diff --git a/mm/nommu.c b/mm/nommu.c
index 7296a5a280e7..18c1b932e2c4 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1251,7 +1251,7 @@ unsigned long do_mmap_pgoff(struct file *file,
1251 unsigned long prot, 1251 unsigned long prot,
1252 unsigned long flags, 1252 unsigned long flags,
1253 unsigned long pgoff, 1253 unsigned long pgoff,
1254 bool *populate) 1254 unsigned long *populate)
1255{ 1255{
1256 struct vm_area_struct *vma; 1256 struct vm_area_struct *vma;
1257 struct vm_region *region; 1257 struct vm_region *region;
@@ -1261,7 +1261,7 @@ unsigned long do_mmap_pgoff(struct file *file,
1261 1261
1262 kenter(",%lx,%lx,%lx,%lx,%lx", addr, len, prot, flags, pgoff); 1262 kenter(",%lx,%lx,%lx,%lx,%lx", addr, len, prot, flags, pgoff);
1263 1263
1264 *populate = false; 1264 *populate = 0;
1265 1265
1266 /* decide whether we should attempt the mapping, and if so what sort of 1266 /* decide whether we should attempt the mapping, and if so what sort of
1267 * mapping */ 1267 * mapping */
diff --git a/mm/util.c b/mm/util.c
index 13467e043e9e..3704bf1bef94 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -355,7 +355,7 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr,
355{ 355{
356 unsigned long ret; 356 unsigned long ret;
357 struct mm_struct *mm = current->mm; 357 struct mm_struct *mm = current->mm;
358 bool populate; 358 unsigned long populate;
359 359
360 ret = security_mmap_file(file, prot, flag); 360 ret = security_mmap_file(file, prot, flag);
361 if (!ret) { 361 if (!ret) {
@@ -363,8 +363,8 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr,
363 ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff, 363 ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff,
364 &populate); 364 &populate);
365 up_write(&mm->mmap_sem); 365 up_write(&mm->mmap_sem);
366 if (!IS_ERR_VALUE(ret) && populate) 366 if (populate)
367 mm_populate(ret, len); 367 mm_populate(ret, populate);
368 } 368 }
369 return ret; 369 return ret;
370} 370}