diff options
Diffstat (limited to 'include/linux/migrate.h')
| -rw-r--r-- | include/linux/migrate.h | 19 | 
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index ce7e6671968..0b5865c61ef 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -7,9 +7,27 @@  typedef struct page *new_page_t(struct page *, unsigned long private, int **); +/* + * Return values from addresss_space_operations.migratepage(): + * - negative errno on page migration failure; + * - zero on page migration success; + * + * The balloon page migration introduces this special case where a 'distinct' + * return code is used to flag a successful page migration to unmap_and_move(). + * This approach is necessary because page migration can race against balloon + * deflation procedure, and for such case we could introduce a nasty page leak + * if a successfully migrated balloon page gets released concurrently with + * migration's unmap_and_move() wrap-up steps. + */ +#define MIGRATEPAGE_SUCCESS		0 +#define MIGRATEPAGE_BALLOON_SUCCESS	1 /* special ret code for balloon page +					   * sucessful migration case. +					   */ +  #ifdef CONFIG_MIGRATION  extern void putback_lru_pages(struct list_head *l); +extern void putback_movable_pages(struct list_head *l);  extern int migrate_page(struct address_space *,  			struct page *, struct page *, enum migrate_mode);  extern int migrate_pages(struct list_head *l, new_page_t x, @@ -33,6 +51,7 @@ extern int migrate_huge_page_move_mapping(struct address_space *mapping,  #else  static inline void putback_lru_pages(struct list_head *l) {} +static inline void putback_movable_pages(struct list_head *l) {}  static inline int migrate_pages(struct list_head *l, new_page_t x,  		unsigned long private, bool offlining,  		enum migrate_mode mode) { return -ENOSYS; }  |