UPSTREAM: mm, thp: Do not make page table dirty unconditionally in touch_p[mu]d()

commit a8f97366452ed491d13cf1e44241bc0b5740b1f0 upstream.

Currently, we unconditionally make page table dirty in touch_pmd().
It may result in false-positive can_follow_write_pmd().

We may avoid the situation, if we would only make the page table entry
dirty if caller asks for write access -- FOLL_WRITE.

The patch also changes touch_pud() in the same way.

Signed-off-by: Kirill A. Shutemov <>
Cc: Michal Hocko <>
Cc: Hugh Dickins <>
Signed-off-by: Linus Torvalds <>
[Salvatore Bonaccorso: backport for 3.16:
 - Adjust context
 - Drop specific part for PUD-sized transparent hugepages. Support
   for PUD-sized transparent hugepages was added in v4.11-rc1
Signed-off-by: Ben Hutchings <>
Signed-off-by: Greg Kroah-Hartman <>
(cherry picked from commit 2b7ef6bdd28610f2907cd766362cf95d0d023801)
Signed-off-by: Daniel Wang <>


Change-Id: I45832bb287b4712634fc2972cf7b4a086465a867
Trybot-Ready: Xuewei Zhang <>
Reviewed-by: Guenter Roeck <>
Commit-Queue: Xuewei Zhang <>
Tested-by: Xuewei Zhang <>
1 file changed