X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=include%2Flinux%2Fmigrate.h;h=e10a90a93b5d25a53fd12b5e623e40ffbc285bf3;hb=3b86301f1217553a80a0ff59a601b0fa3f257b8d;hp=48148e0cdbd179725de653eff14a229c26ad6153;hpb=7b2259b3e53f128c10a9fded0965e69d4a949847;p=safe%2Fjmp%2Flinux-2.6 diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 48148e0..e10a90a 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h @@ -2,10 +2,29 @@ #define _LINUX_MIGRATE_H #include +#include +#include typedef struct page *new_page_t(struct page *, unsigned long private, int **); #ifdef CONFIG_MIGRATION +/* Check if a vma is migratable */ +static inline int vma_migratable(struct vm_area_struct *vma) +{ + if (vma->vm_flags & (VM_IO|VM_HUGETLB|VM_PFNMAP|VM_RESERVED)) + return 0; + /* + * Migration allocates pages in the highest zone. If we cannot + * do so then migration (at least from node to node) is not + * possible. + */ + if (vma->vm_file && + gfp_zone(mapping_gfp_mask(vma->vm_file->f_mapping)) + < policy_zone) + return 0; + return 1; +} + extern int isolate_lru_page(struct page *p, struct list_head *pagelist); extern int putback_lru_pages(struct list_head *l); extern int migrate_page(struct address_space *, @@ -20,6 +39,8 @@ extern int migrate_vmas(struct mm_struct *mm, const nodemask_t *from, const nodemask_t *to, unsigned long flags); #else +static inline int vma_migratable(struct vm_area_struct *vma) + { return 0; } static inline int isolate_lru_page(struct page *p, struct list_head *list) { return -ENOSYS; }