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=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 97773C433DB for ; Tue, 12 Jan 2021 23:49:08 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 36C4023135 for ; Tue, 12 Jan 2021 23:49:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 36C4023135 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linux-foundation.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 7F5E76B0113; Tue, 12 Jan 2021 18:49:07 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7CD4C6B0114; Tue, 12 Jan 2021 18:49:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 709B56B0115; Tue, 12 Jan 2021 18:49:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0193.hostedemail.com [216.40.44.193]) by kanga.kvack.org (Postfix) with ESMTP id 5D72E6B0113 for ; Tue, 12 Jan 2021 18:49:07 -0500 (EST) Received: from smtpin27.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id 253A2181AEF30 for ; Tue, 12 Jan 2021 23:49:07 +0000 (UTC) X-FDA: 77698766334.27.knot41_530696d27519 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin27.hostedemail.com (Postfix) with ESMTP id 07C9E3D669 for ; Tue, 12 Jan 2021 23:49:07 +0000 (UTC) X-HE-Tag: knot41_530696d27519 X-Filterd-Recvd-Size: 2833 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by imf07.hostedemail.com (Postfix) with ESMTP for ; Tue, 12 Jan 2021 23:49:06 +0000 (UTC) Received: by mail.kernel.org (Postfix) with ESMTPSA id 6547723130; Tue, 12 Jan 2021 23:49:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1610495345; bh=e9BMBFEaSOKf0yTOMhrOd2Hj2FNsOt4O1JwdlSqxAR4=; h=Date:From:To:Subject:In-Reply-To:From; b=EDJ16x67znM1zbVVL3ZAZB26KfTcNT35T1YUpem+TmGZoLe45PMiWYQgk8Ac2TqBm INzAnAVxGYHKD7iJa2AQFD3P3h7vf7OxFHPV4tJujn+FtYn4r/YpzX0OIB1qT+solo saWPNJT3TfCMgQD0NSEtjrxNMyknMHA6IgA7HPPI= Date: Tue, 12 Jan 2021 15:49:04 -0800 From: Andrew Morton To: akpm@linux-foundation.org, cl@linux.com, iamjoonsoo.kim@lge.com, jannh@google.com, linux-mm@kvack.org, mm-commits@vger.kernel.org, penberg@kernel.org, rientjes@google.com, torvalds@linux-foundation.org Subject: [patch 01/10] mm, slub: consider rest of partial list if acquire_slab() fails Message-ID: <20210112234904.X5Ka1PlfB%akpm@linux-foundation.org> In-Reply-To: <20210112154839.abeb6e57de79480059fd9b0e@linux-foundation.org> User-Agent: s-nail v14.8.16 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: From: Jann Horn Subject: mm, slub: consider rest of partial list if acquire_slab() fails acquire_slab() fails if there is contention on the freelist of the page (probably because some other CPU is concurrently freeing an object from the page). In that case, it might make sense to look for a different page (since there might be more remote frees to the page from other CPUs, and we don't want contention on struct page). However, the current code accidentally stops looking at the partial list completely in that case. Especially on kernels without CONFIG_NUMA set, this means that get_partial() fails and new_slab_objects() falls back to new_slab(), allocating new pages. This could lead to an unnecessary increase in memory fragmentation. Link: https://lkml.kernel.org/r/20201228130853.1871516-1-jannh@google.com Fixes: 7ced37197196 ("slub: Acquire_slab() avoid loop") Signed-off-by: Jann Horn Acked-by: David Rientjes Acked-by: Joonsoo Kim Cc: Christoph Lameter Cc: Pekka Enberg Signed-off-by: Andrew Morton --- mm/slub.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/mm/slub.c~mm-slub-consider-rest-of-partial-list-if-acquire_slab-fails +++ a/mm/slub.c @@ -1973,7 +1973,7 @@ static void *get_partial_node(struct kme t = acquire_slab(s, n, page, object == NULL, &objects); if (!t) - break; + continue; /* cmpxchg raced */ available += objects; if (!object) { _