diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 817ae73d40bd669c4d891536c5619191c5e6b61e..0301e9bfe1ae2fd84560b1dd24a1077262b3149d 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4858,8 +4858,12 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm, size_t page_size = huge_page_size(h); ret = read_actual_file(page, vma, &off, page_size); - if (ret) + if (ret) { + put_page(page); + pr_err_ratelimited("enhanced hugetlb mmap: read file failed\n"); + ret = vmf_error(ret); goto out; + } } #endif __SetPageUptodate(page); diff --git a/mm/util.c b/mm/util.c index 05efa0b50be765957998cda99dc732cbba3362f7..809db832edd689ab10393efe8e33eea25a27ab21 100644 --- a/mm/util.c +++ b/mm/util.c @@ -24,6 +24,9 @@ #include #include #include +#ifdef CONFIG_ENHANCED_HUGETLB_MMAP +#include +#endif #include #include @@ -516,6 +519,7 @@ static unsigned long finish_hugetlb_mmap(unsigned long addr, struct file *actual if (!vma) return -EINVAL; vma->vm_actual_file = get_file(actual_file); + perf_event_mmap(vma); return addr; }