From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757395Ab1JCTIi (ORCPT ); Mon, 3 Oct 2011 15:08:38 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:54851 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757344Ab1JCTHv (ORCPT ); Mon, 3 Oct 2011 15:07:51 -0400 From: Frederic Weisbecker To: Andrew Morton Cc: LKML , Frederic Weisbecker , Paul Menage , Li Zefan , Johannes Weiner , Aditya Kali , Oleg Nesterov , Kay Sievers , Tim Hockin , Tejun Heo , "Kirill A. Shutemov" , Containers Subject: [PATCH 08/10] cgroups: Pull up res counter charge failure interpretation to caller Date: Mon, 3 Oct 2011 21:07:10 +0200 Message-Id: <1317668832-10784-9-git-send-email-fweisbec@gmail.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1317668832-10784-1-git-send-email-fweisbec@gmail.com> References: <1317668832-10784-1-git-send-email-fweisbec@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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: Andrew Morton Cc: Kay Sievers Cc: Tim Hockin Cc: Tejun Heo Cc: Kirill A. Shutemov Cc: Containers --- Documentation/cgroups/resource_counter.txt | 2 ++ kernel/res_counter.c | 2 +- 2 files changed, 3 insertions(+), 1 deletions(-) diff --git a/Documentation/cgroups/resource_counter.txt b/Documentation/cgroups/resource_counter.txt index a2cd05b..24ec61c 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 6b36823..b814d6c 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; -- 1.7.5.4