mm: page_counter: let page_counter_try_charge() return bool
authorJohannes Weiner <hannes@cmpxchg.org>
Fri, 6 Nov 2015 02:50:26 +0000 (18:50 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 6 Nov 2015 03:34:48 +0000 (19:34 -0800)
page_counter_try_charge() currently returns 0 on success and -ENOMEM on
failure, which is surprising behavior given the function name.

Make it follow the expected pattern of try_stuff() functions that return a
boolean true to indicate success, or false for failure.

Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Vladimir Davydov <vdavydov@virtuozzo.com
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/page_counter.h
mm/hugetlb_cgroup.c
mm/memcontrol.c
mm/page_counter.c

index 17fa4f8..7e62920 100644 (file)
@@ -36,9 +36,9 @@ static inline unsigned long page_counter_read(struct page_counter *counter)
 
 void page_counter_cancel(struct page_counter *counter, unsigned long nr_pages);
 void page_counter_charge(struct page_counter *counter, unsigned long nr_pages);
-int page_counter_try_charge(struct page_counter *counter,
-                           unsigned long nr_pages,
-                           struct page_counter **fail);
+bool page_counter_try_charge(struct page_counter *counter,
+                            unsigned long nr_pages,
+                            struct page_counter **fail);
 void page_counter_uncharge(struct page_counter *counter, unsigned long nr_pages);
 int page_counter_limit(struct page_counter *counter, unsigned long limit);
 int page_counter_memparse(const char *buf, const char *max,
index 6e00574..33d59ab 100644 (file)
@@ -186,7 +186,8 @@ again:
        }
        rcu_read_unlock();
 
-       ret = page_counter_try_charge(&h_cg->hugepage[idx], nr_pages, &counter);
+       if (!page_counter_try_charge(&h_cg->hugepage[idx], nr_pages, &counter))
+               ret = -ENOMEM;
        css_put(&h_cg->css);
 done:
        *ptr = h_cg;
index 59b100f..d47de73 100644 (file)
@@ -2016,8 +2016,8 @@ retry:
                return 0;
 
        if (!do_swap_account ||
-           !page_counter_try_charge(&memcg->memsw, batch, &counter)) {
-               if (!page_counter_try_charge(&memcg->memory, batch, &counter))
+           page_counter_try_charge(&memcg->memsw, batch, &counter)) {
+               if (page_counter_try_charge(&memcg->memory, batch, &counter))
                        goto done_restock;
                if (do_swap_account)
                        page_counter_uncharge(&memcg->memsw, batch);
@@ -2381,14 +2381,13 @@ int __memcg_kmem_charge_memcg(struct page *page, gfp_t gfp, int order,
 {
        unsigned int nr_pages = 1 << order;
        struct page_counter *counter;
-       int ret = 0;
+       int ret;
 
        if (!memcg_kmem_is_active(memcg))
                return 0;
 
-       ret = page_counter_try_charge(&memcg->kmem, nr_pages, &counter);
-       if (ret)
-               return ret;
+       if (!page_counter_try_charge(&memcg->kmem, nr_pages, &counter))
+               return -ENOMEM;
 
        ret = try_charge(memcg, gfp, nr_pages);
        if (ret) {
index 11b4bed..7c6a63d 100644 (file)
@@ -56,12 +56,12 @@ void page_counter_charge(struct page_counter *counter, unsigned long nr_pages)
  * @nr_pages: number of pages to charge
  * @fail: points first counter to hit its limit, if any
  *
- * Returns 0 on success, or -ENOMEM and @fail if the counter or one of
- * its ancestors has hit its configured limit.
+ * Returns %true on success, or %false and @fail if the counter or one
+ * of its ancestors has hit its configured limit.
  */
-int page_counter_try_charge(struct page_counter *counter,
-                           unsigned long nr_pages,
-                           struct page_counter **fail)
+bool page_counter_try_charge(struct page_counter *counter,
+                            unsigned long nr_pages,
+                            struct page_counter **fail)
 {
        struct page_counter *c;
 
@@ -99,13 +99,13 @@ int page_counter_try_charge(struct page_counter *counter,
                if (new > c->watermark)
                        c->watermark = new;
        }
-       return 0;
+       return true;
 
 failed:
        for (c = counter; c != *fail; c = c->parent)
                page_counter_cancel(c, nr_pages);
 
-       return -ENOMEM;
+       return false;
 }
 
 /**