projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
5477e70
)
mremap: don't do mm_populate(new_addr) on failure
author
Oleg Nesterov
<
[email protected]
>
Fri, 4 Sep 2015 22:48:07 +0000
(15:48 -0700)
committer
Linus Torvalds
<
[email protected]
>
Fri, 4 Sep 2015 23:54:41 +0000
(16:54 -0700)
move_vma() sets *locked even if move_page_tables() or ->mremap() fails,
change sys_mremap() to check "ret & ~PAGE_MASK".
I think we should simply remove the VM_LOCKED code in move_vma(), that is
why this patch doesn't change move_vma(). But this needs more cleanups.
Signed-off-by: Oleg Nesterov <
[email protected]
>
Acked-by: David Rientjes <
[email protected]
>
Cc: Benjamin LaHaise <
[email protected]
>
Cc: Hugh Dickins <
[email protected]
>
Cc: Jeff Moyer <
[email protected]
>
Cc: Kirill A. Shutemov <
[email protected]
>
Cc: Laurent Dufour <
[email protected]
>
Cc: Pavel Emelyanov <
[email protected]
>
Signed-off-by: Andrew Morton <
[email protected]
>
Signed-off-by: Linus Torvalds <
[email protected]
>
mm/mremap.c
patch
|
blob
|
history
diff --git
a/mm/mremap.c
b/mm/mremap.c
index 3310378bb60f77a8515bfbf1c53d17849bddabc0..7dcf7b42068e66f59a2c4444c4a39c8851ee186e 100644
(file)
--- a/
mm/mremap.c
+++ b/
mm/mremap.c
@@
-578,8
+578,10
@@
SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
ret = move_vma(vma, addr, old_len, new_len, new_addr, &locked);
}
out:
- if (ret & ~PAGE_MASK)
+ if (ret & ~PAGE_MASK)
{
vm_unacct_memory(charged);
+ locked = 0;
+ }
up_write(¤t->mm->mmap_sem);
if (locked && new_len > old_len)
mm_populate(new_addr + old_len, new_len - old_len);