return ret;
 }
 
+static bool mem_cgroup_check_under_limit(struct mem_cgroup *mem)
+{
+       if (do_swap_account) {
+               if (res_counter_check_under_limit(&mem->res) &&
+                       res_counter_check_under_limit(&mem->memsw))
+                       return true;
+       } else
+               if (res_counter_check_under_limit(&mem->res))
+                       return true;
+       return false;
+}
+
 /*
  * Dance down the hierarchy if needed to reclaim memory. We remember the
  * last child we reclaimed from, so that we don't end up penalizing
         * have left.
         */
        ret = try_to_free_mem_cgroup_pages(root_mem, gfp_mask, noswap);
-       if (res_counter_check_under_limit(&root_mem->res))
+       if (mem_cgroup_check_under_limit(root_mem))
                return 0;
 
        next_mem = mem_cgroup_get_first_node(root_mem);
                        continue;
                }
                ret = try_to_free_mem_cgroup_pages(next_mem, gfp_mask, noswap);
-               if (res_counter_check_under_limit(&root_mem->res))
+               if (mem_cgroup_check_under_limit(root_mem))
                        return 0;
                cgroup_lock();
                next_mem = mem_cgroup_get_next_node(next_mem, root_mem);
                 * current usage of the cgroup before giving up
                 *
                 */
-               if (do_swap_account) {
-                       if (res_counter_check_under_limit(&mem_over_limit->res) &&
-                           res_counter_check_under_limit(&mem_over_limit->memsw))
-                               continue;
-               } else if (res_counter_check_under_limit(&mem_over_limit->res))
-                               continue;
+               if (mem_cgroup_check_under_limit(mem_over_limit))
+                       continue;
 
                if (!nr_retries--) {
                        if (oom) {
 
        do {
                progress = try_to_free_mem_cgroup_pages(mem, gfp_mask, true);
-               progress += res_counter_check_under_limit(&mem->res);
+               progress += mem_cgroup_check_under_limit(mem);
        } while (!progress && --retry);
 
        css_put(&mem->css);