Received: by 2002:a89:413:0:b0:1fd:dba5:e537 with SMTP id m19csp316036lqs; Thu, 13 Jun 2024 10:46:13 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUCvFVV7qa3EWuAhc7LDbryYb7nB9TsOtsKN3ifpqwfwQLnRR7+YFOWylHBmfNgK2AuxwTDPM5xamfvT/6361pEJqxj7UxgTwaoKvTH6w== X-Google-Smtp-Source: AGHT+IEHYb7Oga/pOQXpQgYUu32NWDb64C9PvXAFhVuVesIgSMn2h/5hf8/K90oomcR4dNtn6mcX X-Received: by 2002:a17:90a:f488:b0:2c2:faf7:67a0 with SMTP id 98e67ed59e1d1-2c4db24d28emr504025a91.16.1718300773274; Thu, 13 Jun 2024 10:46:13 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718300773; cv=pass; d=google.com; s=arc-20160816; b=qMHe21Dkw5yvEwQkFgnqoCD/1obVS+Rd9w6pm+r6A3ar0oLSZ1S3Rlp6mMenIzeqDr 9LudYDEwRFBkRmP2Z7eH0m5qtDah4rYDT52iEQnIQSFr5iyPVPMJpKWZPaHddE2RxuGJ yDLuKLSSF3fJMM0ytFhaeypPKcWpWDhjVu/oBEFKdgqnSDOAfd3cp2CfJEXf/vvOxm4I 58rozhinGE/QS0c+ndQslNvoiJBd30z/Xg2r1eV5vWPXI+ZZI17cPs8KEpv4rDa3Tmp1 rjrAL1bJbzaxjJZxGEhdGgr2F74/7M09ri2O5E+I9K4N04ul2483X78a4QdGhxQVXaAQ 9FqA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:reply-to:message-id:subject:cc:to:from:date :dkim-signature; bh=43EBv3bqk5TJ/N5jsYOVmpIXoeq+rDtb59MZdKnhnQo=; fh=rdlTWAXaMiy165+nOHAVQ+DnN9PG5nyHX7DPtm3Ni94=; b=bM4CJt8Db8+f2rdryNbwA8MbOI0Amw6lQm0aJsRHpjeIXwt6n8/LHkfxgim9UQyO4Y MyuWEod24KFhAiJbegj/uyvo0E2vB0JvefT7roCwmynVhnDQkW4hy0K6rzunFK45lprg c11m/mcAVQX6H58BtmOq6Hnu/bq7SEgnHkj7YyEG4qaD0AsYklWhTt66NsbU5hIUQ0+7 M90D4FSvR+T68/xUyXg4gofe6UuFUrktG0Kx5vv332PTk/LT37kg1nyW82thfbbLOrRS BPygVIHPqKHZrDTkiKqGLXj/3H+JhgNRd4f8m/0HwK1FO2QCmAYoCs5nuoWhOuDT4cCv MugQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qEbQkQ+U; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-3779-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-nfs+bounces-3779-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id 98e67ed59e1d1-2c4a76e46f9si4129554a91.147.2024.06.13.10.46.12 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 13 Jun 2024 10:46:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-nfs+bounces-3779-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qEbQkQ+U; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-3779-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-nfs+bounces-3779-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 1B2E4B2190A for ; Thu, 13 Jun 2024 17:46:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6D6C214A0BC; Thu, 13 Jun 2024 17:46:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qEbQkQ+U" X-Original-To: linux-nfs@vger.kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1A2B012E1C2; Thu, 13 Jun 2024 17:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718300760; cv=none; b=UB08yYcIZVentnpOaBWyh2bfZ7fsLqPRNNAkblzooQmiEOBEBuptW9xm7XjwTbjoS4zq0BYjCyBXhaZb8EQdiks2CzJPz8d1zwtd8PrqF2xE1ycfsW0zMkPBtDivwJg9qG7yO96FcAI7L9ha1Xz+y/hfFPtN84wFJMuWb6h81TQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718300760; c=relaxed/simple; bh=8wZftwNb/k7uIh9XSIxuBqvpXG6ZPovdvQIUEmPnupc=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=oqpxmmFxF5elukSMKgC07Z7W8QEQ4IrUV61i3jR3ixiy4ekA2mnNSQUPLwTjqDKldGJJOU25CAPpGhroCKob95nt4CWORTREI7zzpl2F4kdHGhyfAuveoA9qo5p9iYDU3gUfJB5HGRPDet8fs1tmuzLM37yeoHpBqMcBGscFZ1k= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qEbQkQ+U; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 80014C2BBFC; Thu, 13 Jun 2024 17:45:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1718300759; bh=8wZftwNb/k7uIh9XSIxuBqvpXG6ZPovdvQIUEmPnupc=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To:From; b=qEbQkQ+UG3cqDCkPWEZuFpKomUQZ2djBRGbA7EzDh2d7JKykflV9684BKaUVP0poZ hIEOKqV4RjAZCZqUFtq/Fzd33aTZIQbfH/JE50LEMZ8hGgtLdw/EB23V+3xw2VOuIZ qrAuLp7I8tYjJ+AZnEs09c6345tne5dWCGQ0B1jge1o9wIjFoU4Bu/a0z60D/IBXXt FW0yk+gUMaKr4/T8D989Jx8E9iDtm5SJrjQvu3TKBPP59LiSiEIwvrD8NCIgFF8WDp OV4LtOCrBe6gjqoKjnWhQG17bVbuiIJF363t8yR29EgEH+KPBsHqEqQ/VAvl20tLVU 6zqe3onttfsfg== Received: by paulmck-ThinkPad-P17-Gen-1.home (Postfix, from userid 1000) id 290BCCE0760; Thu, 13 Jun 2024 10:45:59 -0700 (PDT) Date: Thu, 13 Jun 2024 10:45:59 -0700 From: "Paul E. McKenney" To: Uladzislau Rezki Cc: Vlastimil Babka , "Jason A. Donenfeld" , Jakub Kicinski , Julia Lawall , linux-block@vger.kernel.org, kernel-janitors@vger.kernel.org, bridge@lists.linux.dev, linux-trace-kernel@vger.kernel.org, Mathieu Desnoyers , kvm@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, "Naveen N. Rao" , Christophe Leroy , Nicholas Piggin , netdev@vger.kernel.org, wireguard@lists.zx2c4.com, linux-kernel@vger.kernel.org, ecryptfs@vger.kernel.org, Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , linux-nfs@vger.kernel.org, linux-can@vger.kernel.org, Lai Jiangshan , netfilter-devel@vger.kernel.org, coreteam@netfilter.org Subject: Re: [PATCH 00/14] replace call_rcu by kfree_rcu for simple kmem_cache_free callback Message-ID: Reply-To: paulmck@kernel.org References: <20240609082726.32742-1-Julia.Lawall@inria.fr> <20240612143305.451abf58@kernel.org> <80e03b02-7e24-4342-af0b-ba5117b19828@paulmck-laptop> <7efde25f-6af5-4a67-abea-b26732a8aca1@paulmck-laptop> Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Thu, Jun 13, 2024 at 07:38:59PM +0200, Uladzislau Rezki wrote: > On Thu, Jun 13, 2024 at 08:06:30AM -0700, Paul E. McKenney wrote: > > On Thu, Jun 13, 2024 at 03:06:54PM +0200, Uladzislau Rezki wrote: > > > On Thu, Jun 13, 2024 at 05:47:08AM -0700, Paul E. McKenney wrote: > > > > On Thu, Jun 13, 2024 at 01:58:59PM +0200, Jason A. Donenfeld wrote: > > > > > On Wed, Jun 12, 2024 at 03:37:55PM -0700, Paul E. McKenney wrote: > > > > > > On Wed, Jun 12, 2024 at 02:33:05PM -0700, Jakub Kicinski wrote: > > > > > > > On Sun, 9 Jun 2024 10:27:12 +0200 Julia Lawall wrote: > > > > > > > > Since SLOB was removed, it is not necessary to use call_rcu > > > > > > > > when the callback only performs kmem_cache_free. Use > > > > > > > > kfree_rcu() directly. > > > > > > > > > > > > > > > > The changes were done using the following Coccinelle semantic patch. > > > > > > > > This semantic patch is designed to ignore cases where the callback > > > > > > > > function is used in another way. > > > > > > > > > > > > > > How does the discussion on: > > > > > > > [PATCH] Revert "batman-adv: prefer kfree_rcu() over call_rcu() with free-only callbacks" > > > > > > > https://lore.kernel.org/all/20240612133357.2596-1-linus.luessing@c0d3.blue/ > > > > > > > reflect on this series? IIUC we should hold off.. > > > > > > > > > > > > We do need to hold off for the ones in kernel modules (such as 07/14) > > > > > > where the kmem_cache is destroyed during module unload. > > > > > > > > > > > > OK, I might as well go through them... > > > > > > > > > > > > [PATCH 01/14] wireguard: allowedips: replace call_rcu by kfree_rcu for simple kmem_cache_free callback > > > > > > Needs to wait, see wg_allowedips_slab_uninit(). > > > > > > > > > > Also, notably, this patch needs additionally: > > > > > > > > > > diff --git a/drivers/net/wireguard/allowedips.c b/drivers/net/wireguard/allowedips.c > > > > > index e4e1638fce1b..c95f6937c3f1 100644 > > > > > --- a/drivers/net/wireguard/allowedips.c > > > > > +++ b/drivers/net/wireguard/allowedips.c > > > > > @@ -377,7 +377,6 @@ int __init wg_allowedips_slab_init(void) > > > > > > > > > > void wg_allowedips_slab_uninit(void) > > > > > { > > > > > - rcu_barrier(); > > > > > kmem_cache_destroy(node_cache); > > > > > } > > > > > > > > > > Once kmem_cache_destroy has been fixed to be deferrable. > > > > > > > > > > I assume the other patches are similar -- an rcu_barrier() can be > > > > > removed. So some manual meddling of these might be in order. > > > > > > > > Assuming that the deferrable kmem_cache_destroy() is the option chosen, > > > > agreed. > > > > > > > > > > void kmem_cache_destroy(struct kmem_cache *s) > > > { > > > int err = -EBUSY; > > > bool rcu_set; > > > > > > if (unlikely(!s) || !kasan_check_byte(s)) > > > return; > > > > > > cpus_read_lock(); > > > mutex_lock(&slab_mutex); > > > > > > rcu_set = s->flags & SLAB_TYPESAFE_BY_RCU; > > > > > > s->refcount--; > > > if (s->refcount) > > > goto out_unlock; > > > > > > err = shutdown_cache(s); > > > WARN(err, "%s %s: Slab cache still has objects when called from %pS", > > > __func__, s->name, (void *)_RET_IP_); > > > ... > > > cpus_read_unlock(); > > > if (!err && !rcu_set) > > > kmem_cache_release(s); > > > } > > > > > > > > > so we have SLAB_TYPESAFE_BY_RCU flag that defers freeing slab-pages > > > and a cache by a grace period. Similar flag can be added, like > > > SLAB_DESTROY_ONCE_FULLY_FREED, in this case a worker rearm itself > > > if there are still objects which should be freed. > > > > > > Any thoughts here? > > > > Wouldn't we also need some additional code to later check for all objects > > being freed to the slab, whether or not that code is initiated from > > kmem_cache_destroy()? > > > Same away as SLAB_TYPESAFE_BY_RCU is handled from the kmem_cache_destroy() function. > It checks that flag and if it is true and extra worker is scheduled to perform a > deferred(instead of right away) destroy after rcu_barrier() finishes. Like this? SLAB_DESTROY_ONCE_FULLY_FREED Instead of adding a new kmem_cache_destroy_rcu() or kmem_cache_destroy_wait() API member, instead add a SLAB_DESTROY_ONCE_FULLY_FREED flag that can be passed to the existing kmem_cache_destroy() function.? Use of this flag would suppress any warnings that would otherwise be issued if there was still slab memory yet to be freed, and it would also spawn workqueues (or timers or whatever) to do any needed cleanup work. Thanx, Paul