aboutsummaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorMike Kravetz <mike.kravetz@oracle.com>2015-06-10 10:10:11 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2015-06-10 10:10:11 +1000
commit7bd23d29041e6709cbb8f1a1b8d5398876104462 (patch)
treeef5c285f2857f94ee58a6927cfe8fb833f879aca /mm
parent0d8e58163f57a04445f7ecf72ec56dfa2737586c (diff)
mm/hugetlb: handle races in alloc_huge_page and hugetlb_reserve_pages
Reserve count adjustments need to take into account hugetlbfs min_size reservation pools Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com> Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Cc: Davidlohr Bueso <dave@stgolabs.net> Cc: David Rientjes <rientjes@google.com> Cc: Luiz Capitulino <lcapitulino@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/hugetlb.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 009c7225c9bc..75c0eef52c5d 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1594,8 +1594,10 @@ static struct page *alloc_huge_page(struct vm_area_struct *vma,
* the reservation count added in hugetlb_reserve_pages
* no longer applies.
*/
- hugepage_subpool_put_pages(spool, 1);
- hugetlb_acct_memory(h, -1);
+ long rsv_adjust;
+
+ rsv_adjust = hugepage_subpool_put_pages(spool, 1);
+ hugetlb_acct_memory(h, -rsv_adjust);
}
return page;
@@ -3725,8 +3727,11 @@ int hugetlb_reserve_pages(struct inode *inode,
* the subpool and reserve counts modified above
* based on the difference.
*/
- hugepage_subpool_put_pages(spool, chg - add);
- hugetlb_acct_memory(h, -(chg - ret));
+ long rsv_adjust;
+
+ rsv_adjust = hugepage_subpool_put_pages(spool,
+ chg - add);
+ hugetlb_acct_memory(h, -rsv_adjust);
}
}
return 0;