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 <kirill.shutemov@linux.intel.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[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 <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 2b7ef6bdd28610f2907cd766362cf95d0d023801)
Signed-off-by: Daniel Wang <wonderfly@google.com>

BUG=b:70219322
TEST=trybot

Change-Id: I45832bb287b4712634fc2972cf7b4a086465a867
Reviewed-on: https://chromium-review.googlesource.com/810025
Reviewed-by: Guenter Roeck <groeck@chromium.org>
Commit-Queue: Saied Kazemi <saied@google.com>
Tested-by: Saied Kazemi <saied@google.com>
1 file changed