diff options
Diffstat (limited to 'mm/migrate.c')
| -rw-r--r-- | mm/migrate.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index f53838fe3dfe..ee401e4e5ef1 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -918,7 +918,8 @@ out:  static ICE_noinline int unmap_and_move(new_page_t get_new_page,  				   free_page_t put_new_page,  				   unsigned long private, struct page *page, -				   int force, enum migrate_mode mode) +				   int force, enum migrate_mode mode, +				   enum migrate_reason reason)  {  	int rc = 0;  	int *result = NULL; @@ -949,7 +950,8 @@ out:  		list_del(&page->lru);  		dec_zone_page_state(page, NR_ISOLATED_ANON +  				page_is_file_cache(page)); -		putback_lru_page(page); +		if (reason != MR_MEMORY_FAILURE) +			putback_lru_page(page);  	}  	/* @@ -1122,7 +1124,8 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,  						pass > 2, mode);  			else  				rc = unmap_and_move(get_new_page, put_new_page, -						private, page, pass > 2, mode); +						private, page, pass > 2, mode, +						reason);  			switch(rc) {  			case -ENOMEM: @@ -1796,7 +1799,7 @@ fail_putback:  	 */  	flush_cache_range(vma, mmun_start, mmun_end);  	page_add_anon_rmap(new_page, vma, mmun_start); -	pmdp_clear_flush_notify(vma, mmun_start, pmd); +	pmdp_huge_clear_flush_notify(vma, mmun_start, pmd);  	set_pmd_at(mm, mmun_start, pmd, entry);  	flush_tlb_range(vma, mmun_start, mmun_end);  	update_mmu_cache_pmd(vma, address, &entry);  |