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 17fa4f8de3a6791271780c0e489f5462492e030b..7e62920a3a94ac20f28faca2467f7ddca3515d52 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 6e0057439a469b2cf38e9e9aee1f40a17dd08d59..33d59abe91f1a72a8e98ae5b25310ebdafb9bc17 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 59b100fde35f37fbe2c2e3dca10e5a1cd56d641e..d47de73d7c361bbec6e9f914f4773acbf118796a 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 11b4beda14ba9963f5799c6b6638d8a170bd8878..7c6a63d2c27ff4737afc2f5915edfcffcc356a62 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;
 }
 
 /**