summaryrefslogtreecommitdiff
path: root/mm/hugetlb.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-22 00:14:47 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-04-22 00:14:47 +0300
commit3a26172437bb5ecdf6921e3ae24730ef37d3c860 (patch)
tree79b9aee78c58d0138ddf3f5c45ca3fcf35e07958 /mm/hugetlb.c
parentcef62a615d22369d817757d1e4fe64fdf42a401e (diff)
parent085b7755808aa11f78ab9377257e1dad2e6fa4bb (diff)
downloadlinux-3a26172437bb5ecdf6921e3ae24730ef37d3c860.tar.xz
Merge 5.1-rc6 into char-misc-next
We want the fixes, and this resolves a merge error in the fastrpc driver. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r--mm/hugetlb.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 97b1e0290c66..6cdc7b2d9100 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4299,6 +4299,19 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
pfn_offset = (vaddr & ~huge_page_mask(h)) >> PAGE_SHIFT;
page = pte_page(huge_ptep_get(pte));
+
+ /*
+ * Instead of doing 'try_get_page()' below in the same_page
+ * loop, just check the count once here.
+ */
+ if (unlikely(page_count(page) <= 0)) {
+ if (pages) {
+ spin_unlock(ptl);
+ remainder = 0;
+ err = -ENOMEM;
+ break;
+ }
+ }
same_page:
if (pages) {
pages[i] = mem_map_offset(page, pfn_offset);