summaryrefslogtreecommitdiffstats
path: root/mm/ksm.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2017-10-20 13:06:52 +0200
committerIngo Molnar <mingo@kernel.org>2017-10-20 13:06:52 +0200
commit967535223f9a8d95c187a8728480b569164cd4f4 (patch)
treeb68a403701555a747b25c903d8136d86a1a1c133 /mm/ksm.c
parent5b65c4677a57a1d4414212f9995aa0e46a21ff80 (diff)
parentce56a86e2ade45d052b3228cdfebe913a1ae7381 (diff)
downloadlinux-967535223f9a8d95c187a8728480b569164cd4f4.tar.gz
linux-967535223f9a8d95c187a8728480b569164cd4f4.tar.bz2
linux-967535223f9a8d95c187a8728480b569164cd4f4.zip
Merge branch 'x86/urgent' into x86/mm, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'mm/ksm.c')
-rw-r--r--mm/ksm.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/ksm.c b/mm/ksm.c
index db20f8436bc3..6cb60f46cce5 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -1990,6 +1990,7 @@ static void stable_tree_append(struct rmap_item *rmap_item,
*/
static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)
{
+ struct mm_struct *mm = rmap_item->mm;
struct rmap_item *tree_rmap_item;
struct page *tree_page = NULL;
struct stable_node *stable_node;
@@ -2062,9 +2063,11 @@ static void cmp_and_merge_page(struct page *page, struct rmap_item *rmap_item)
if (ksm_use_zero_pages && (checksum == zero_checksum)) {
struct vm_area_struct *vma;
- vma = find_mergeable_vma(rmap_item->mm, rmap_item->address);
+ down_read(&mm->mmap_sem);
+ vma = find_mergeable_vma(mm, rmap_item->address);
err = try_to_merge_one_page(vma, page,
ZERO_PAGE(rmap_item->address));
+ up_read(&mm->mmap_sem);
/*
* In case of failure, the page was not really empty, so we
* need to continue. Otherwise we're done.
@@ -3043,7 +3046,7 @@ static struct attribute *ksm_attrs[] = {
NULL,
};
-static struct attribute_group ksm_attr_group = {
+static const struct attribute_group ksm_attr_group = {
.attrs = ksm_attrs,
.name = "ksm",
};