diff options
author | Benjamin LaHaise <bcrl@kvack.org> | 2013-12-21 22:56:08 (GMT) |
---|---|---|
committer | Benjamin LaHaise <bcrl@kvack.org> | 2013-12-21 22:56:08 (GMT) |
commit | 8e321fefb0e60bae4e2a28d20fc4fa30758d27c6 (patch) | |
tree | c00de123ad058cc2d69a2e3d59dd7a2bb7500542 /include | |
parent | 1881686f842065d2f92ec9c6424830ffc17d23b0 (diff) | |
download | linux-8e321fefb0e60bae4e2a28d20fc4fa30758d27c6.tar.xz |
aio/migratepages: make aio migrate pages sane
The arbitrary restriction on page counts offered by the core
migrate_page_move_mapping() code results in rather suspicious looking
fiddling with page reference counts in the aio_migratepage() operation.
To fix this, make migrate_page_move_mapping() take an extra_count parameter
that allows aio to tell the code about its own reference count on the page
being migrated.
While cleaning up aio_migratepage(), make it validate that the old page
being passed in is actually what aio_migratepage() expects to prevent
misbehaviour in the case of races.
Signed-off-by: Benjamin LaHaise <bcrl@kvack.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/migrate.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index b7717d7..f015c05 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -55,7 +55,8 @@ extern int migrate_huge_page_move_mapping(struct address_space *mapping, struct page *newpage, struct page *page); extern int migrate_page_move_mapping(struct address_space *mapping, struct page *newpage, struct page *page, - struct buffer_head *head, enum migrate_mode mode); + struct buffer_head *head, enum migrate_mode mode, + int extra_count); #else static inline void putback_lru_pages(struct list_head *l) {} |