forked from Minki/linux
[PATCH] mm: remove_mapping() safeness
Some users of remove_mapping had been unsafe. Modify the remove_mapping precondition to ensure the caller has locked the page and obtained the correct mapping. Modify callers to ensure the mapping is the correct one. [hugh@veritas.com: swapper_space fix] Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Hugh Dickins <hugh@veritas.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
bfa5bf6d64
commit
28e4d965e6
@ -377,8 +377,8 @@ static pageout_t pageout(struct page *page, struct address_space *mapping)
|
||||
|
||||
int remove_mapping(struct address_space *mapping, struct page *page)
|
||||
{
|
||||
if (!mapping)
|
||||
return 0; /* truncate got there first */
|
||||
BUG_ON(!PageLocked(page));
|
||||
BUG_ON(mapping != page_mapping(page));
|
||||
|
||||
write_lock_irq(&mapping->tree_lock);
|
||||
|
||||
@ -547,7 +547,7 @@ static unsigned long shrink_page_list(struct list_head *page_list,
|
||||
goto free_it;
|
||||
}
|
||||
|
||||
if (!remove_mapping(mapping, page))
|
||||
if (!mapping || !remove_mapping(mapping, page))
|
||||
goto keep_locked;
|
||||
|
||||
free_it:
|
||||
|
Loading…
Reference in New Issue
Block a user