Patchwork [3.5.y.z,extended,stable] Patch "mm: don't overwrite mm->def_flags in do_mlockall()" has been added to staging queue

mail settings
Submitter Herton Ronaldo Krzesinski
Date Feb. 15, 2013, 5:03 p.m.
Message ID <>
Download mbox | patch
Permalink /patch/221143/
State New
Headers show


Herton Ronaldo Krzesinski - Feb. 15, 2013, 5:03 p.m.
This is a note to let you know that I have just added a patch titled

    mm: don't overwrite mm->def_flags in do_mlockall()

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



From 2b6fa114faf2d17d0e8a72be3c486d64559aa4fd Mon Sep 17 00:00:00 2001
From: Gerald Schaefer <>
Date: Tue, 12 Feb 2013 13:46:20 -0800
Subject: [PATCH] mm: don't overwrite mm->def_flags in do_mlockall()

commit 9977f0f164d46613288e0b5778eae500dfe06f31 upstream.

With commit 8e72033f2a48 ("thp: make MADV_HUGEPAGE check for
mm->def_flags") the VM_NOHUGEPAGE flag may be set on s390 in
mm->def_flags for certain processes, to prevent future thp mappings.
This would be overwritten by do_mlockall(), which sets it back to 0 with
an optional VM_LOCKED flag set.

To fix this, instead of overwriting mm->def_flags in do_mlockall(), only
the VM_LOCKED flag should be set or cleared.

Signed-off-by: Gerald Schaefer <>
Reported-by: Vivek Goyal <>
Cc: Andrea Arcangeli <>
Cc: Hugh Dickins <>
Cc: Martin Schwidefsky <>
Cc: Heiko Carstens <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>
Signed-off-by: Herton Ronaldo Krzesinski <>
 mm/mlock.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)



diff --git a/mm/mlock.c b/mm/mlock.c
index ef726e8..3283272 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -524,11 +524,11 @@  SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len)
 static int do_mlockall(int flags)
 	struct vm_area_struct * vma, * prev = NULL;
-	unsigned int def_flags = 0;

 	if (flags & MCL_FUTURE)
-		def_flags = VM_LOCKED;
-	current->mm->def_flags = def_flags;
+		current->mm->def_flags |= VM_LOCKED;
+	else
+		current->mm->def_flags &= ~VM_LOCKED;
 	if (flags == MCL_FUTURE)
 		goto out;