From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-23.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C7E5DC4338F for ; Sun, 1 Aug 2021 05:32:37 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 6C5FA61078 for ; Sun, 1 Aug 2021 05:32:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 6C5FA61078 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id C87446B0033; Sun, 1 Aug 2021 01:32:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C36F36B0036; Sun, 1 Aug 2021 01:32:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B25F46B005D; Sun, 1 Aug 2021 01:32:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0188.hostedemail.com [216.40.44.188]) by kanga.kvack.org (Postfix) with ESMTP id 94A706B0033 for ; Sun, 1 Aug 2021 01:32:36 -0400 (EDT) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 3A3461DE6D for ; Sun, 1 Aug 2021 05:32:36 +0000 (UTC) X-FDA: 78425391912.17.5AE8916 Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by imf10.hostedemail.com (Postfix) with ESMTP id DD4A56001E77 for ; Sun, 1 Aug 2021 05:32:35 +0000 (UTC) Received: by mail-lj1-f169.google.com with SMTP id x7so19334210ljn.10 for ; Sat, 31 Jul 2021 22:32:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7J4wUyNX78qif2RKUFd3wsafpswn9+jydrAIq9BO51s=; b=WwFYADtaE9jNcoAEF8oYqB4AcklFthGbkFLFGQSQ1uKQPJgRQWwSxYkFjHLNSokU63 1W76gDWWpbP1CaRSCmHCoz/ixwMMX+zQHrcZJmsCLI2BWu8XLt0zkrHBsSCcHlEL8wvv nUTIAoa5yAp5VFGZrnhiPO0af1366UVqrWQZVTRq6mF4y3b9VYsw71mEWEaFdiHFbDmY dj+d6oqsJfjIyzdYdw9B/g9X8FdLor4nzIlWm6VZVpYh61rJCOUZh0bHcW3Dx04OdaF+ 56uZFvff27zjqK9dNZ10SHPaLa9MDEWMumqFb/VL+jn4OQFzmqqcHq98pgRwUoKVgeat h4wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7J4wUyNX78qif2RKUFd3wsafpswn9+jydrAIq9BO51s=; b=G+4Hqq2tzGd6az2syG7BCYTo+mhXdltUC7hZ5olhFCK10L5XpCHdi5VTOuHEe4cuvN craBuBCm/A8+BJAYH5CTow4urrYEUh4sgy+2w47xYIioOJKLYnBMbsm/ycAP5Ft6rofV 1gjjXUqU0fpn3sz4q/J2HDbmjsJfq9XPfRvMfMBf8V3Cs0lMbjhbFJUJafelH4vcJwBP xLLMnAavE4pI56akzpHzokOkW8Bd/0dVTrnEr+IT3rAYfOBqe0Ndj/wyHm4xAoC/plLl oOJH33h/v7kzWipIwYaCAb7kffHQ1Vf6oC2Ce0gbPyj8aNEKtikJkB6gyYptisfkOSfA ND2A== X-Gm-Message-State: AOAM533YBXUV3hsHcz5GUwbMuYdaoSkQTG2URJinSLAUnjSJEWYePG9O cut6vpKiXDyniegT2qDUYtw8Nh3H+G8uPzk9yAQqkA== X-Google-Smtp-Source: ABdhPJx487LYrQWlxhYEv7l56r+0t7kddFosW2G0L5cqyIm7I/q1xfrjFli9AHjU7lhgTbMg+OTKU6QU7Vth7M1qX1E= X-Received: by 2002:a05:651c:906:: with SMTP id e6mr6932238ljq.160.1627795953826; Sat, 31 Jul 2021 22:32:33 -0700 (PDT) MIME-Version: 1.0 References: <20210729145259.24681c326dc3ed18194cf9e5@linux-foundation.org> <20210729215350.SZC9InNuL%akpm@linux-foundation.org> In-Reply-To: From: Shakeel Butt Date: Sat, 31 Jul 2021 22:32:22 -0700 Message-ID: Subject: Re: [patch 6/7] slub: fix unreclaimable slab stat for bulk free To: Nathan Chancellor Cc: LKML , Andrew Morton , Christoph Lameter , Roman Gushchin , Joonsoo Kim , Linux MM , Michal Hocko , mm-commits@vger.kernel.org, Pekka Enberg , David Rientjes , Muchun Song , Linus Torvalds , Vlastimil Babka Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: DD4A56001E77 Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20161025 header.b=WwFYADta; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf10.hostedemail.com: domain of shakeelb@google.com designates 209.85.208.169 as permitted sender) smtp.mailfrom=shakeelb@google.com X-Stat-Signature: w9rmg1ysh4tibso7rykqh5ei5gwqkqxb X-HE-Tag: 1627795955-759179 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Hi Nathan, On Sat, Jul 31, 2021 at 3:18 PM Nathan Chancellor wrote: > > On Thu, Jul 29, 2021 at 02:53:50PM -0700, Andrew Morton wrote: > > From: Shakeel Butt > > Subject: slub: fix unreclaimable slab stat for bulk free > > > > SLUB uses page allocator for higher order allocations and update > > unreclaimable slab stat for such allocations. At the moment, the bulk > > free for SLUB does not share code with normal free code path for these > > type of allocations and have missed the stat update. So, fix the stat > > update by common code. The user visible impact of the bug is the > > potential of inconsistent unreclaimable slab stat visible through meminfo > > and vmstat. > > > > Link: https://lkml.kernel.org/r/20210728155354.3440560-1-shakeelb@google.com > > Fixes: 6a486c0ad4dc ("mm, sl[ou]b: improve memory accounting") > > Signed-off-by: Shakeel Butt > > Acked-by: Michal Hocko > > Acked-by: Roman Gushchin > > Reviewed-by: Muchun Song > > Cc: Christoph Lameter > > Cc: Pekka Enberg > > Cc: David Rientjes > > Cc: Joonsoo Kim > > Cc: Vlastimil Babka > > Signed-off-by: Andrew Morton > > --- > > > > mm/slub.c | 22 ++++++++++++---------- > > 1 file changed, 12 insertions(+), 10 deletions(-) > > > > --- a/mm/slub.c~slub-fix-unreclaimable-slab-stat-for-bulk-free > > +++ a/mm/slub.c > > @@ -3236,6 +3236,16 @@ struct detached_freelist { > > struct kmem_cache *s; > > }; > > > > +static inline void free_nonslab_page(struct page *page) > > +{ > > + unsigned int order = compound_order(page); > > + > > + VM_BUG_ON_PAGE(!PageCompound(page), page); > > + kfree_hook(page_address(page)); > > + mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, -(PAGE_SIZE << order)); > > + __free_pages(page, order); > > +} > > + > > /* > > * This function progressively scans the array with free objects (with > > * a limited look ahead) and extract objects belonging to the same > > @@ -3272,9 +3282,7 @@ int build_detached_freelist(struct kmem_ > > if (!s) { > > /* Handle kalloc'ed objects */ > > if (unlikely(!PageSlab(page))) { > > - BUG_ON(!PageCompound(page)); > > - kfree_hook(object); > > - __free_pages(page, compound_order(page)); > > + free_nonslab_page(page); > > p[size] = NULL; /* mark object processed */ > > return size; > > } > > @@ -4250,13 +4258,7 @@ void kfree(const void *x) > > > > page = virt_to_head_page(x); > > if (unlikely(!PageSlab(page))) { > > - unsigned int order = compound_order(page); > > - > > - BUG_ON(!PageCompound(page)); > > - kfree_hook(object); > > - mod_lruvec_page_state(page, NR_SLAB_UNRECLAIMABLE_B, > > - -(PAGE_SIZE << order)); > > - __free_pages(page, order); > > + free_nonslab_page(page); > > return; > > } > > slab_free(page->slab_cache, page, object, NULL, 1, _RET_IP_); > > _ > > This patch, now in mainline as commit f227f0faf63b ("slub: fix > unreclaimable slab stat for bulk free") causes the KASAN KUnit test > kmalloc_pagealloc_invalid_free to no longer fail: > > [ 0.000000] Linux version 5.14.0-rc3-00066-gf227f0faf63b (nathan@archlinux-ax161) (x86_64-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Sat Jul 31 15:08:11 MST 2021 > ... > [ 5.717678] # kmalloc_pagealloc_invalid_free: EXPECTATION FAILED at lib/test_kasan.c:203 > [ 5.717678] KASAN failure expected in "kfree(ptr + 1)", but none occurred > [ 5.718909] not ok 6 - kmalloc_pagealloc_invalid_free > ... > [ 9.481520] not ok 1 - kasan > > The previous commit is fine: > > [ 0.000000] Linux version 5.14.0-rc3-00065-gb5916c025432 (nathan@archlinux-ax161) (x86_64-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Sat Jul 31 15:05:09 MST 2021 > ... > [ 9.347598] ok 1 - kasan > > I am by no means a KASAN or mm/ expert, I noticed this when trying to > test KASAN with clang for ClangBuiltLinux's CI, so it does not appear to > be compiler dependent. It is reproducible for me in QEMU with > x86_64_defconfig + CONFIG_KASAN=y + CONFIG_KUNIT=y + > CONFIG_KASAN_KUNIT_TEST=y. > > Please let me know if there is any other information I can provide or > testing I can do. > Thanks for the report. This is actually due to changing kfree_hook(object) to kfree_hook(page_address(page)). The test forces slub to go to the page allocator and then freeing with the next byte address instead of the returned address. Since both are addresses on the same page, the code is fine but the kasan test is not happy. The test is making sure that programmers use the address returned by kmalloc in the kfree. I don't think this is urgent but I will send the patch to fix this during the week. thanks, Shakeel