diff options
Diffstat (limited to 'mm/mempolicy.c')
| -rw-r--r-- | mm/mempolicy.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 83369058ec1..36f42573a33 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -93,6 +93,8 @@  #include <asm/tlbflush.h>  #include <asm/uaccess.h> +#include "internal.h" +  /* Internal flags */  #define MPOL_MF_DISCONTIG_OK (MPOL_MF_INTERNAL << 0)	/* Skip checks for continuous vmas */  #define MPOL_MF_INVERT (MPOL_MF_INTERNAL << 1)		/* Invert check for nodemask */ @@ -762,8 +764,11 @@ static void migrate_page_add(struct page *page, struct list_head *pagelist,  	/*  	 * Avoid migrating a page that is shared with others.  	 */ -	if ((flags & MPOL_MF_MOVE_ALL) || page_mapcount(page) == 1) -		isolate_lru_page(page, pagelist); +	if ((flags & MPOL_MF_MOVE_ALL) || page_mapcount(page) == 1) { +		if (!isolate_lru_page(page)) { +			list_add_tail(&page->lru, pagelist); +		} +	}  }  static struct page *new_node_page(struct page *page, unsigned long node, int **x) @@ -2197,7 +2202,7 @@ static void gather_stats(struct page *page, void *private, int pte_dirty)  	if (PageSwapCache(page))  		md->swapcache++; -	if (PageActive(page)) +	if (PageActive(page) || PageUnevictable(page))  		md->active++;  	if (PageWriteback(page))  |