aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memory.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/memory.c')
-rw-r--r--mm/memory.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/mm/memory.c b/mm/memory.c
index 054250ee4a68..7bd22a621817 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2994,17 +2994,16 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
2994 if (unlikely(!PageSwapCache(page) || page_private(page) != entry.val)) 2994 if (unlikely(!PageSwapCache(page) || page_private(page) != entry.val))
2995 goto out_page; 2995 goto out_page;
2996 2996
2997 if (ksm_might_need_to_copy(page, vma, address)) { 2997 swapcache = page;
2998 swapcache = page; 2998 page = ksm_might_need_to_copy(page, vma, address);
2999 page = ksm_does_need_to_copy(page, vma, address); 2999 if (unlikely(!page)) {
3000 3000 ret = VM_FAULT_OOM;
3001 if (unlikely(!page)) { 3001 page = swapcache;
3002 ret = VM_FAULT_OOM; 3002 swapcache = NULL;
3003 page = swapcache; 3003 goto out_page;
3004 swapcache = NULL;
3005 goto out_page;
3006 }
3007 } 3004 }
3005 if (page == swapcache)
3006 swapcache = NULL;
3008 3007
3009 if (mem_cgroup_try_charge_swapin(mm, page, GFP_KERNEL, &ptr)) { 3008 if (mem_cgroup_try_charge_swapin(mm, page, GFP_KERNEL, &ptr)) {
3010 ret = VM_FAULT_OOM; 3009 ret = VM_FAULT_OOM;