mm-slightly-clarify-ksm-logic-in-do_swap_page.patch removed from -mm tree
The patch titled
Subject: mm: slightly clarify KSM logic in do_swap_page()
has been removed from the -mm tree. Its filename was
mm-slightly-clarify-ksm-logic-in-do_swap_page.patch
This patch was dropped because it was merged into mainline or a subsystem tree
------------------------------------------------------
From: David Hildenbrand <[email protected]>
Subject: mm: slightly clarify KSM logic in do_swap_page()
Let's make it clearer that KSM might only have to copy a page in case we have a page in the swapcache, not if we allocated a fresh page and bypassed the swapcache. While at it, add a comment why this is usually necessary and merge the two swapcache conditions.
---
mm/memory.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-)
mm/memory.c renamed from mm/memory.c~mm-slightly-clarify-ksm-logic-in-do_swap_page +22 -14
@@ -3607,21 +3607,29 @@ vm_fault_t do_swap_page(struct vm_fault goto out_release; } -/* -* Make sure try_to_free_swap or reuse_swap_page or swapoff did not -* release the swapcache from under us. The page pin, and pte_same -* test below, are not enough to exclude that. Even if it is still -* swapcache, we need to check that the page's swap has not changed. -*/ -if (unlikely ((!PageSwapCache (page) || -page_private (page) != entry.val)) && swapcache) - goto out_page; +if (swapcache) { +/* +* Make sure try_to_free_swap or swapoff did not release the +* swapcache from under us. The page pin, and pte_same test +* below, are not enough to exclude that. Even if it is still +* swapcache, we need to check that the page's swap has not +* changed. +*/ +if (unlikely (!PageSwapCache (page) || +page_private (page) != entry.val)) + goto out_page; - page =ksm_might_need_to_copy (page, vma, vmf->address); -if (unlikely (!page)) { - ret =VM_FAULT_OOM ; - page = swapcache; - goto out_page; +/* +* KSM sometimes has to copy on read faults, for example, if +* page->index of !PageKSM() pages would be nonlinear inside the +* anon VMA -- PageKSM() is lost on actual swapout. +*/ + page =ksm_might_need_to_copy (page, vma, vmf->address); +if (unlikely (!page)) { + ret =VM_FAULT_OOM ; + page = swapcache; + goto out_page; + } }cgroup_throttle_swaprate (page,GFP_KERNEL );
_
Patches currently in -mm which might be from [email protected] are