The patch titled Subject: mm/hugetlb: define hugetlb_falloc structure for hole punch race has been added to the -mm tree. Its filename is mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race.patch This patch should soon appear at http://ozlabs.org/~akpm/mmots/broken-out/mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race.patch and later at http://ozlabs.org/~akpm/mmotm/broken-out/mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Mike Kravetz <mike.kravetz@xxxxxxxxxx> Subject: mm/hugetlb: define hugetlb_falloc structure for hole punch race The hugetlbfs fallocate hole punch code can race with page faults. The result is that after a hole punch operation, pages may remain within the hole. No other side effects of this race were observed. In preparation for adding userfaultfd support to hugetlbfs, it is desirable to close the window of this race. This patch set starts by using the same mechanism employed in shmem (see commit f00cdc6df7). This greatly reduces the race window. However, it is still possible for the race to occur. The current hugetlbfs code to remove pages did not deal with pages that were mapped (because of such a race). This patch set also adds code to unmap pages in this rare case. This unmapping of a single page happens under the hugetlb_fault_mutex, so it can not be faulted again until the end of the operation. This patch (of 4): A hugetlb_falloc structure is pointed to by i_private during fallocate hole punch operations. Page faults check this structure and if they are in the hole, wait for the operation to finish. Signed-off-by: Mike Kravetz <mike.kravetz@xxxxxxxxxx> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> Cc: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Cc: Hugh Dickins <hughd@xxxxxxxxxx> Cc: Davidlohr Bueso <dave@xxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/hugetlb.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff -puN include/linux/hugetlb.h~mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race include/linux/hugetlb.h --- a/include/linux/hugetlb.h~mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race +++ a/include/linux/hugetlb.h @@ -42,6 +42,16 @@ struct resv_map { extern struct resv_map *resv_map_alloc(void); void resv_map_release(struct kref *ref); +/* + * hugetlb_falloc is used to prevent page faults during falloc hole punch + * operations. During hole punch, inode->i_private points to this struct. + */ +struct hugetlb_falloc { + wait_queue_head_t *waitq; /* Page faults waiting on hole punch */ + pgoff_t start; /* Start of fallocate hole */ + pgoff_t end; /* End of fallocate hole */ +}; + extern spinlock_t hugetlb_lock; extern int hugetlb_max_hstate __read_mostly; #define for_each_hstate(h) \ _ Patches currently in -mm which might be from mike.kravetz@xxxxxxxxxx are mm-hugetlb-define-hugetlb_falloc-structure-for-hole-punch-race.patch mm-hugetlb-setup-hugetlb_falloc-during-fallocate-hole-punch.patch mm-hugetlb-page-faults-check-for-fallocate-hole-punch-in-progress-and-wait.patch mm-hugetlb-unmap-pages-to-remove-if-page-fault-raced-with-hole-punch.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html