projects
/
GitHub
/
MotorolaMobilityLLC
/
kernel-slsi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
bcd438b
)
mm/mempolicy.c: fix pgoff in mbind vma merge
author
Caspar Zhang
<caspar@casparzhang.com>
Wed, 14 Sep 2011 23:20:58 +0000
(16:20 -0700)
committer
Linus Torvalds
<torvalds@linux-foundation.org>
Thu, 15 Sep 2011 01:09:36 +0000
(18:09 -0700)
commit
9d8cebd4bcd7
("mm: fix mbind vma merge problem") didn't really
fix the mbind vma merge problem due to wrong pgoff value passing to
vma_merge(), which made vma_merge() always return NULL.
Before the patch applied, we are getting a result like:
addr = 0x7fa58f00c000
[snip]
7fa58f00c000
-
7fa58f00d000
rw-p
00000000
00:00 0
7fa58f00d000
-
7fa58f00e000
rw-p
00000000
00:00 0
7fa58f00e000
-
7fa58f00f000
rw-p
00000000
00:00 0
here
7fa58f00c000
->
7fa58f00f000
we get 3 VMAs which are expected to be
merged described as described in commit
9d8cebd
.
Re-testing the patched kernel with the reproducer provided in commit
9d8cebd
, we get the correct result:
addr = 0x7ffa5aaa2000
[snip]
7ffa5aaa2000
-
7ffa5aaa6000
rw-p
00000000
00:00 0
7fffd556f000
-
7fffd5584000
rw-p
00000000
00:00 0 [stack]
Signed-off-by: Caspar Zhang <caspar@casparzhang.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
Cc: Minchan Kim <minchan.kim@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/mempolicy.c
patch
|
blob
|
blame
|
history
diff --git
a/mm/mempolicy.c
b/mm/mempolicy.c
index 8b57173c1dd5b09a8bb0b3e24fedb8c8584ce447..b1f70d6eec35af18b96bf5b3b85f98c9ce4fdeba 100644
(file)
--- a/
mm/mempolicy.c
+++ b/
mm/mempolicy.c
@@
-636,7
+636,6
@@
static int mbind_range(struct mm_struct *mm, unsigned long start,
struct vm_area_struct *prev;
struct vm_area_struct *vma;
int err = 0;
- pgoff_t pgoff;
unsigned long vmstart;
unsigned long vmend;
@@
-649,9
+648,9
@@
static int mbind_range(struct mm_struct *mm, unsigned long start,
vmstart = max(start, vma->vm_start);
vmend = min(end, vma->vm_end);
- pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
prev = vma_merge(mm, prev, vmstart, vmend, vma->vm_flags,
- vma->anon_vma, vma->vm_file, pgoff, new_pol);
+ vma->anon_vma, vma->vm_file, vma->vm_pgoff,
+ new_pol);
if (prev) {
vma = prev;
next = vma->vm_next;