From: Frederic Weisbecker <fweisbec@xxxxxxxxx> 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 <fweisbec@xxxxxxxxx> Cc: Paul Menage <paul@xxxxxxxxxxxxxx> Cc: Li Zefan <lizf@xxxxxxxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Aditya Kali <adityakali@xxxxxxxxxx> Cc: Oleg Nesterov <oleg@xxxxxxxxxx> Cc: Tim Hockin <thockin@xxxxxxxxxx> Cc: Tejun Heo <htejun@xxxxxxxxx> Cc: Containers <containers@xxxxxxxxxxxxxxxxxxxxxxxxxx> Cc: Glauber Costa <glommer@xxxxxxxxx> Cc: Cgroups <cgroups@xxxxxxxxxxxxxxx> Cc: Daniel J Walsh <dwalsh@xxxxxxxxxx> Cc: "Daniel P. Berrange" <berrange@xxxxxxxxxx> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx> Cc: Max Kellermann <mk@xxxxxxxxxx> Cc: Mandeep Singh Baines <msb@xxxxxxxxxxxx> Acked-by: Kirill A. Shutemov <kirill@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- 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 57f41d5..7ca0d11 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, bool force) diff --git a/kernel/res_counter.c b/kernel/res_counter.c index ece24f7..79155f9 100644 --- a/kernel/res_counter.c +++ b/kernel/res_counter.c @@ -29,7 +29,7 @@ int res_counter_charge_locked(struct res_counter *counter, unsigned long val, if (counter->usage + val > counter->limit) { counter->failcnt++; - ret = -ENOMEM; + ret = -1; if (!force) return ret; } -- 1.8.3.1 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/containers