diff options
author | Hugh Dickins <hugh.dickins@tiscali.co.uk> | 2009-09-21 20:03:26 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-22 10:17:40 -0400 |
commit | 8e4b9a60718970bbc02dfd3abd0b956ab65af231 (patch) | |
tree | 4c19152cea19882071a74f92c0cf6a16d5711f41 /mm/internal.h | |
parent | f3e8fccd06d27773186a0094371daf2d84c79469 (diff) |
mm: FOLL_DUMP replace FOLL_ANON
The "FOLL_ANON optimization" and its use_zero_page() test have caused
confusion and bugs: why does it test VM_SHARED? for the very good but
unsatisfying reason that VMware crashed without. As we look to maybe
reinstating anonymous use of the ZERO_PAGE, we need to sort this out.
Easily done: it's silly for __get_user_pages() and follow_page() to
be guessing whether it's safe to assume that they're being used for
a coredump (which can take a shortcut snapshot where other uses must
handle a fault) - just tell them with GUP_FLAGS_DUMP and FOLL_DUMP.
get_dump_page() doesn't even want a ZERO_PAGE: an error suits fine.
Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Acked-by: Rik van Riel <riel@redhat.com>
Acked-by: Mel Gorman <mel@csn.ul.ie>
Reviewed-by: Minchan Kim <minchan.kim@gmail.com>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Cc: Nick Piggin <npiggin@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/internal.h')
-rw-r--r-- | mm/internal.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/mm/internal.h b/mm/internal.h index 166765cd58d6..d41475078b20 100644 --- a/mm/internal.h +++ b/mm/internal.h | |||
@@ -252,6 +252,7 @@ static inline void mminit_validate_memmodel_limits(unsigned long *start_pfn, | |||
252 | 252 | ||
253 | #define GUP_FLAGS_WRITE 0x01 | 253 | #define GUP_FLAGS_WRITE 0x01 |
254 | #define GUP_FLAGS_FORCE 0x02 | 254 | #define GUP_FLAGS_FORCE 0x02 |
255 | #define GUP_FLAGS_DUMP 0x04 | ||
255 | 256 | ||
256 | int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, | 257 | int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm, |
257 | unsigned long start, int len, int flags, | 258 | unsigned long start, int len, int flags, |