From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753715AbdGNKZ1 (ORCPT ); Fri, 14 Jul 2017 06:25:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45686 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752602AbdGNKZZ (ORCPT ); Fri, 14 Jul 2017 06:25:25 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com B2FEE83F43 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=shuwang@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com B2FEE83F43 Date: Fri, 14 Jul 2017 06:25:22 -0400 (EDT) From: Shu Wang To: catalin marinas , corbet@lwn.net Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, liwang@redhat.com, chuhu@redhat.com Message-ID: <620980434.27658899.1500027922463.JavaMail.zimbra@redhat.com> In-Reply-To: <1500025160-25504-1-git-send-email-shuwang@redhat.com> References: <1500025160-25504-1-git-send-email-shuwang@redhat.com> Subject: Re: [PATCH] kmemleak: add oom= runtime parameter MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [10.66.12.174, 10.4.195.16] Thread-Topic: kmemleak: add oom= runtime parameter Thread-Index: tiqvvTLZmsqxhzltXYyNLoty8y1Kbg== X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Fri, 14 Jul 2017 10:25:25 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi please ignore this patch, I'll upload another one. Thanks ----- Original Message ----- > From: shuwang@redhat.com > To: "catalin marinas" , corbet@lwn.net > Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, liwang@redhat.com, > shuwang@redhat.com, chuhu@redhat.com > Sent: Friday, July 14, 2017 5:39:20 PM > Subject: [PATCH] kmemleak: add oom= runtime parameter > > From: Shu Wang > > When running memory stress tests, kmemleak could be easily disabled in > function create_object as system is out of memory and kmemleak failed to > alloc from object_cache. Since there's no way to enable kmemleak after > it's off, simply ignore the object_cache alloc failure will just loses > track of some memory objects, but could increase the usability of kmemleak > under memory stress. > > The default action for oom is still disable kmemleak, > echo oom=ignore > /sys/kernel/debug/kmemleak can change to action to > ignore oom. > > Signed-off-by: Shu Wang > --- > Documentation/dev-tools/kmemleak.rst | 5 +++++ > mm/kmemleak.c | 10 +++++++++- > 2 files changed, 14 insertions(+), 1 deletion(-) > > diff --git a/Documentation/dev-tools/kmemleak.rst > b/Documentation/dev-tools/kmemleak.rst > index cb88626..3013809 100644 > --- a/Documentation/dev-tools/kmemleak.rst > +++ b/Documentation/dev-tools/kmemleak.rst > @@ -60,6 +60,11 @@ Memory scanning parameters can be modified at run-time by > writing to the > or free all kmemleak objects if kmemleak has been disabled. > - dump= > dump information about the object found at > +- oom=disable > + disable kmemleak after system out of memory (default) > +- oom=ignore > + do not disable kmemleak after system out of memory > + (useful for memory stress test, but will lose some objects) > > Kmemleak can also be disabled at boot-time by passing ``kmemleak=off`` on > the kernel command line. > diff --git a/mm/kmemleak.c b/mm/kmemleak.c > index 7780cd8..a58080f 100644 > --- a/mm/kmemleak.c > +++ b/mm/kmemleak.c > @@ -236,6 +236,9 @@ static DEFINE_MUTEX(scan_mutex); > static int kmemleak_skip_disable; > /* If there are leaks that can be reported */ > static bool kmemleak_found_leaks; > +/* If disable kmemleak after out of memory */ > +static bool kmemleak_oom_disable = true; > + > > /* > * Early object allocation/freeing logging. Kmemleak is initialized after > the > @@ -556,7 +559,8 @@ static struct kmemleak_object *create_object(unsigned > long ptr, size_t size, > object = kmem_cache_alloc(object_cache, gfp_kmemleak_mask(gfp)); > if (!object) { > pr_warn("Cannot allocate a kmemleak_object structure\n"); > - kmemleak_disable(); > + if (kmemleak_oom_disable) > + kmemleak_disable(); > return NULL; > } > > @@ -1888,6 +1892,10 @@ static ssize_t kmemleak_write(struct file *file, const > char __user *user_buf, > kmemleak_scan(); > else if (strncmp(buf, "dump=", 5) == 0) > ret = dump_str_object_info(buf + 5); > + else if (strncmp(buf, "oom=ignore", 10)) > + kmemleak_oom_disable = false; > + else if (strncmp(buf, "oom=disable", 11)) > + kmemleak_oom_disable = true; > else > ret = -EINVAL; > > -- > 2.5.0 > >