Commit:     906e0be197232c219197d058ef5095baa7764cd4
Parent:     4ab688c51226188f2d4ad4f789032c107944ef89
Author:     Christoph Lameter <[EMAIL PROTECTED]>
AuthorDate: Sun May 6 14:50:20 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Mon May 7 12:12:57 2007 -0700

    page migration: Only migrate pages if allocation in the highest zone is 
    Address spaces contain an allocation flag that specifies restriction on the
    zone for pages placed in the mapping.  I.e.  some device may require pages
    to be allocated from a DMA zone.  Block devices may not be able to use
    pages from HIGHMEM.
    Memory policies and the common use of page migration works only on the
    highest zone.  If the address space does not allow allocation from the
    highest zone then the pages in the address space are not migratable simply
    because we can only allocate memory for a specified node if we allow
    allocation for the highest zone on each node.
    Acked-by: Hugh Dickins <[EMAIL PROTECTED]>
    Signed-off-by: Christoph Lameter <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 include/linux/migrate.h |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/include/linux/migrate.h b/include/linux/migrate.h
index 75e55dc..e10a90a 100644
--- a/include/linux/migrate.h
+++ b/include/linux/migrate.h
@@ -2,18 +2,29 @@
 #include <linux/mm.h>
+#include <linux/mempolicy.h>
+#include <linux/pagemap.h>
 typedef struct page *new_page_t(struct page *, unsigned long private, int **);
 /* 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 *,
@@ -28,6 +39,8 @@ extern int migrate_vmas(struct mm_struct *mm,
                const nodemask_t *from, const nodemask_t *to,
                unsigned long flags);
+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; }
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to