Currently, we have two variable to represent whether we can use reserved
page or not, chg and avoid_reserve, respectively. With aggregating these,
we can have more clean code. This makes no functinoal difference.

Reviewed-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>
Signed-off-by: Joonsoo Kim <iamjoonsoo....@lge.com>

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 9d456d4..9927407 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -508,8 +508,7 @@ static inline gfp_t htlb_alloc_mask(struct hstate *h)
 
 static struct page *dequeue_huge_page_vma(struct hstate *h,
                                struct vm_area_struct *vma,
-                               unsigned long address, int avoid_reserve,
-                               long chg)
+                               unsigned long address, bool use_reserve)
 {
        struct page *page = NULL;
        struct mempolicy *mpol;
@@ -523,14 +522,10 @@ static struct page *dequeue_huge_page_vma(struct hstate 
*h,
         * A child process with MAP_PRIVATE mappings created by their parent
         * have no page reserves. This check ensures that reservations are
         * not "stolen". The child may still get SIGKILLed.
-        * chg represents whether current user has a reserved hugepages or not,
-        * so that we can use it to ensure that reservations are not "stolen".
+        * Or, when parent process do COW, we cannot use reserved page.
+        * In this case, ensure enough pages are in the pool.
         */
-       if (chg && h->free_huge_pages - h->resv_huge_pages == 0)
-               goto err;
-
-       /* If reserves cannot be used, ensure enough pages are in the pool */
-       if (avoid_reserve && h->free_huge_pages - h->resv_huge_pages == 0)
+       if (!use_reserve && h->free_huge_pages - h->resv_huge_pages == 0)
                goto err;
 
 retry_cpuset:
@@ -543,13 +538,7 @@ retry_cpuset:
                if (cpuset_zone_allowed_softwall(zone, htlb_alloc_mask(h))) {
                        page = dequeue_huge_page_node(h, zone_to_nid(zone));
                        if (page) {
-                               if (avoid_reserve)
-                                       break;
-                               /*
-                                * chg means whether current user allocates
-                                * a hugepage on the reserved pool or not
-                                */
-                               if (chg)
+                               if (!use_reserve)
                                        break;
 
                                SetPagePrivate(page);
@@ -1194,6 +1183,7 @@ static struct page *alloc_huge_page(struct vm_area_struct 
*vma,
        struct hstate *h = hstate_vma(vma);
        struct page *page;
        long chg;
+       bool use_reserve;
        int ret, idx;
        struct hugetlb_cgroup *h_cg;
 
@@ -1209,18 +1199,19 @@ static struct page *alloc_huge_page(struct 
vm_area_struct *vma,
        chg = vma_needs_reservation(h, vma, addr);
        if (chg < 0)
                return ERR_PTR(-ENOMEM);
-       if (chg || avoid_reserve)
+       use_reserve = (!chg && !avoid_reserve);
+       if (!use_reserve)
                if (hugepage_subpool_get_pages(spool, 1))
                        return ERR_PTR(-ENOSPC);
 
        ret = hugetlb_cgroup_charge_cgroup(idx, pages_per_huge_page(h), &h_cg);
        if (ret) {
-               if (chg || avoid_reserve)
+               if (!use_reserve)
                        hugepage_subpool_put_pages(spool, 1);
                return ERR_PTR(-ENOSPC);
        }
        spin_lock(&hugetlb_lock);
-       page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve, chg);
+       page = dequeue_huge_page_vma(h, vma, addr, use_reserve);
        if (!page) {
                spin_unlock(&hugetlb_lock);
                page = alloc_buddy_huge_page(h, NUMA_NO_NODE);
@@ -1228,7 +1219,7 @@ static struct page *alloc_huge_page(struct vm_area_struct 
*vma,
                        hugetlb_cgroup_uncharge_cgroup(idx,
                                                       pages_per_huge_page(h),
                                                       h_cg);
-                       if (chg || avoid_reserve)
+                       if (!use_reserve)
                                hugepage_subpool_put_pages(spool, 1);
                        return ERR_PTR(-ENOSPC);
                }
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to