aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorLuden <luden@ghostmail.com>2016-02-13 23:56:40 +0100
committerZiyan <jaraidaniel@gmail.com>2016-05-01 23:35:56 +0200
commit7fd80cc6a3049e630d84d2baaae87fa1eece486c (patch)
tree964da6cecbb4ffffdb6cc238d5013c2c6a9bb478 /mm
parentc3f47a7451568ae3d3e33f75666fc37439794223 (diff)
downloadkernel_samsung_tuna-7fd80cc6a3049e630d84d2baaae87fa1eece486c.tar.gz
kernel_samsung_tuna-7fd80cc6a3049e630d84d2baaae87fa1eece486c.tar.bz2
kernel_samsung_tuna-7fd80cc6a3049e630d84d2baaae87fa1eece486c.zip
ksm_migrate_page() changes from the mainline.
Diffstat (limited to 'mm')
-rw-r--r--mm/ksm.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/mm/ksm.c b/mm/ksm.c
index 07a8358df93..aa8b0c76e78 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1784,6 +1784,14 @@ void ksm_migrate_page(struct page *newpage, struct page *oldpage)
if (stable_node) {
VM_BUG_ON(stable_node->kpfn != page_to_pfn(oldpage));
stable_node->kpfn = page_to_pfn(newpage);
+ /*
+ * newpage->mapping was set in advance; now we need smp_wmb()
+ * to make sure that the new stable_node->kpfn is visible
+ * to get_ksm_page() before it can see that oldpage->mapping
+ * has gone stale (or that PageSwapCache has been cleared).
+ */
+ smp_wmb();
+ set_page_stable_node(oldpage, NULL);
}
}