Commit 9cb247d8 authored by Hugh Dickins's avatar Hugh Dickins Committed by James Toy

We kept agreeing not to bother about the unswappable shared KSM pages

which later become unshared by others: observation suggests they're not
a significant proportion.  But they are disadvantageous, and it is easier
to break COW to replace them by swappable pages, than offer statistics
to show that they don't matter; then we can stop worrying about them.

Doing this in ksm_do_scan, they don't go through cmp_and_merge_page on
this pass: give them a good chance of getting into the unstable tree
on the next pass, or back into the stable, by computing checksum now.
Signed-off-by: default avatarHugh Dickins <hugh.dickins@tiscali.co.uk>
Acked-by: default avatarIzik Eidus <ieidus@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 8bbfbf88
...@@ -1275,6 +1275,14 @@ static void ksm_do_scan(unsigned int scan_npages) ...@@ -1275,6 +1275,14 @@ static void ksm_do_scan(unsigned int scan_npages)
return; return;
if (!PageKsm(page) || !in_stable_tree(rmap_item)) if (!PageKsm(page) || !in_stable_tree(rmap_item))
cmp_and_merge_page(page, rmap_item); cmp_and_merge_page(page, rmap_item);
else if (page_mapcount(page) == 1) {
/*
* Replace now-unshared ksm page by ordinary page.
*/
break_cow(rmap_item->mm, rmap_item->address);
remove_rmap_item_from_tree(rmap_item);
rmap_item->oldchecksum = calc_checksum(page);
}
put_page(page); put_page(page);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment