mm: gup: enable FOLL_MM_SYNC by default for FOLL_LONGTERM
Drivers that for whatever reason can risk to lose coherency with the
MM after taking readonly long term pins (as result of later COW
faults), can specify __FOLL_LONGTERM to opt-out from FOLL_MM_SYNC.
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 46ce49b..95eb99e 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -2873,13 +2873,15 @@ struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
#define FOLL_REMOTE 0x2000 /* we are working on non-current tsk/mm */
#define FOLL_COW 0x4000 /* internal GUP flag */
#define FOLL_ANON 0x8000 /* don't do file mappings */
-#define FOLL_LONGTERM 0x10000 /* mapping lifetime is indefinite: see below */
+#define __FOLL_LONGTERM 0x10000 /* mapping lifetime is indefinite: see below */
#define FOLL_SPLIT_PMD 0x20000 /* split huge pmd before returning */
#define FOLL_PIN 0x40000 /* pages must be released via unpin_user_page */
#define FOLL_FAST_ONLY 0x80000 /* gup_fast: prevent fall-back to slow gup */
#define FOLL_NOUNSHARE 0x100000 /* gup: don't trigger a COR fault */
#define FOLL_MM_SYNC 0x200000/* gup: long term mm coherency to page pins */
+#define FOLL_LONGTERM (FOLL_MM_SYNC|__FOLL_LONGTERM)
+
/*
* FOLL_PIN and FOLL_LONGTERM may be used in various combinations with each
* other. Here is what they mean, and how to use them: