alloc_huge_page() now mixes normal code path with error handle logic.
This patches move out the error handle logic, to make normal code
path more clean and redue code duplicate.

Signed-off-by: Jianyu Zhan <nasa4...@gmail.com>
---
 mm/hugetlb.c | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 26b1464..e81c69e 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1246,24 +1246,17 @@ static struct page *alloc_huge_page(struct 
vm_area_struct *vma,
                        return ERR_PTR(-ENOSPC);
 
        ret = hugetlb_cgroup_charge_cgroup(idx, pages_per_huge_page(h), &h_cg);
-       if (ret) {
-               if (chg || avoid_reserve)
-                       hugepage_subpool_put_pages(spool, 1);
-               return ERR_PTR(-ENOSPC);
-       }
+       if (ret)
+               goto out_subpool_put;
+
        spin_lock(&hugetlb_lock);
        page = dequeue_huge_page_vma(h, vma, addr, avoid_reserve, chg);
        if (!page) {
                spin_unlock(&hugetlb_lock);
                page = alloc_buddy_huge_page(h, NUMA_NO_NODE);
-               if (!page) {
-                       hugetlb_cgroup_uncharge_cgroup(idx,
-                                                      pages_per_huge_page(h),
-                                                      h_cg);
-                       if (chg || avoid_reserve)
-                               hugepage_subpool_put_pages(spool, 1);
-                       return ERR_PTR(-ENOSPC);
-               }
+               if (!page)
+                       goto out_uncharge_cgroup;
+
                spin_lock(&hugetlb_lock);
                list_move(&page->lru, &h->hugepage_activelist);
                /* Fall through */
@@ -1275,6 +1268,13 @@ static struct page *alloc_huge_page(struct 
vm_area_struct *vma,
 
        vma_commit_reservation(h, vma, addr);
        return page;
+
+out_uncharge_cgroup:
+       hugetlb_cgroup_uncharge_cgroup(idx, pages_per_huge_page(h), h_cg);
+out_subpool_put:
+       if (chg || avoid_reserve)
+               hugepage_subpool_put_pages(spool, 1);
+       return ERR_PTR(-ENOSPC);
 }
 
 /*
-- 
2.0.0-rc3

--
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