From 4f5d9aa078553bd4ca3a6408582dfd828773d177 Mon Sep 17 00:00:00 2001 From: Frederic Weisbecker Date: Wed, 30 Nov 2011 15:11:51 +1100 Subject: [PATCH] cgroups: pull up res counter charge failure interpretation to caller res_counter_charge() always returns -ENOMEM when the limit is reached and the charge thus can't happen. However it's up to the caller to interpret this failure and return the appropriate error value. The task counter subsystem will need to report the user that a fork() has been cancelled because of some limit reached, not because we are too short on memory. Fix this by returning -1 when res_counter_charge() fails. Signed-off-by: Frederic Weisbecker Cc: Paul Menage Cc: Li Zefan Cc: Johannes Weiner Cc: Aditya Kali Cc: Oleg Nesterov Cc: Kay Sievers Cc: Tim Hockin Cc: Tejun Heo Acked-by: Kirill A. Shutemov Signed-off-by: Andrew Morton --- Documentation/cgroups/resource_counter.txt | 2 ++ kernel/res_counter.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/cgroups/resource_counter.txt b/Documentation/cgroups/resource_counter.txt index a2cd05bdbb39..24ec61ccf5d0 100644 --- a/Documentation/cgroups/resource_counter.txt +++ b/Documentation/cgroups/resource_counter.txt @@ -76,6 +76,8 @@ to work with it. limit_fail_at parameter is set to the particular res_counter element where the charging failed. + It returns 0 on success and -1 on failure. + d. int res_counter_charge_locked (struct res_counter *rc, unsigned long val) diff --git a/kernel/res_counter.c b/kernel/res_counter.c index 6b36823541ba..b814d6ca9ff5 100644 --- a/kernel/res_counter.c +++ b/kernel/res_counter.c @@ -26,7 +26,7 @@ int res_counter_charge_locked(struct res_counter *counter, unsigned long val) { if (counter->usage + val > counter->limit) { counter->failcnt++; - return -ENOMEM; + return -1; } counter->usage += val; -- 2.39.5