Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp85749lqs; Mon, 4 Mar 2024 16:11:40 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVp5Ji1RwK3IFOMJt15C5sLm0JA3QNKhHiwZ/KZMm9d+2FrJBP4uR7ve68CDnCbwUCuECqbmPonFzBTp+Ybr1OYpIl6Z6bSFTMVck829Q== X-Google-Smtp-Source: AGHT+IGlMdLp5bngbsKSQ67xtpqRfGuSFnWFhWXuhRLQ9T8FiExe7jKtAMYeoxe42gsTTF8a4gj0 X-Received: by 2002:a05:6102:190a:b0:472:6162:41c7 with SMTP id jk10-20020a056102190a00b00472616241c7mr318264vsb.9.1709597500165; Mon, 04 Mar 2024 16:11:40 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709597500; cv=pass; d=google.com; s=arc-20160816; b=lmMUylKA2IZGSDgXROvyuKBBccRJuGXZgwG2fQE0BtcUeNYvBaFlQbP/J14zd21TDI aHZBSERjL2mrRRJZCTL6rgqrFCGTDexE5Qfg8zyrmKGllAN+FUoPqqglAh/nfvcdrPqr KG2BYOBqnikhCmZ3oRKvtiwitwFtkou01RucRwOrB7pfC+zSCWo4SRp5+LVMatELh6uv Qq9zkC8yAFt63Eryl5P7r/am/SdCEnSv7yTysm8BJA2xA8w28T1X1V/tf1xKwUu3zdOZ XWQnAJzaL2NpEa0wkPYznFITfWAlVtNHpr1PVsBUEr7w0iR+PsrFVF5wr/aQEGe5W6ix eGtw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :user-agent:content-transfer-encoding:autocrypt:references :in-reply-to:date:cc:to:from:subject:message-id:dkim-signature; bh=yojmOzRFA8gTeDpg4Gkx2yC+7kJKZGbT4WLQICRIUlI=; fh=FVom988rX7d/6K4c3SVsNFnOn1ZSzrr1WXxdWe+vckg=; b=o2hMwgoB28c2paWi+xagJlY1TWVssIPUm2nKfDnZaSEEtw03X6B7XizcLer46mLOFT /MHAYd2qXmiRyTaxKX5JL0TE/mle2XBBh40+gCwU1WM0WlCH2PHH7j+SjM+lhYm/2vNa qT8DZT6eYOnGBtE/xvrlgk+f2rfOPZH1P15en/BcENhMA0MsiMX4oO+EzpmzdQkYm2Cr Jm/IyceLbvkDmlHCsqTMi8elWEvUajUfafVl9XbnJ/HjYqt2IJ0UuzbFCYyoBDYKCZby s8YqnJAnZy3nxjE1uqhNMz1nYcZ6QNbkCUcbqssOM49YNRn6xVi+y3AEfdMNjqBR4Z09 2Gfg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=R4Is1umd; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-2202-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-nfs+bounces-2202-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id m5-20020ad45dc5000000b0068f44e6cc33si10874685qvh.10.2024.03.04.16.11.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Mar 2024 16:11:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-nfs+bounces-2202-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=R4Is1umd; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-nfs+bounces-2202-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-nfs+bounces-2202-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 ny.mirrors.kernel.org (Postfix) with ESMTPS id AEF291C213DC for ; Tue, 5 Mar 2024 00:11:39 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 59D22635; Tue, 5 Mar 2024 00:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="R4Is1umd" 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 3400C391 for ; Tue, 5 Mar 2024 00:11:37 +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=1709597498; cv=none; b=HLcFRrl7YWMShHWV+3q7paoTK/4IsBO5BzVSUi0DDy83uk0TksGoqQxDqr0yqsNd6Jg3Ep63YLY+KuERZrXT4Q2V1cZtpGAg29GH36N46FKmpOheLkZaG5jroCdVtAzThg048mj3YUXjfA9U0xsze3SQBGRcMhYTkWIj1NRbG6U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709597498; c=relaxed/simple; bh=jDt6Q8w6U85sQktq2l2FkbtnmqrlYD0Pcbf6MHZMO2c=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=QUQr95obYUGdyb/47mbx/WD9YOUr3aTI92EU0LcrVBM0ZJO3fcjQQs/vJoGaTVUyROmVN8MtiZTOne8EaEaUZUsAQjzgOIthulmrlqTEV3VQVRPz9cFadqo8XuqxGj5OKDA5iMkH17nVHFOu1PXSgF4x8ebSrl/uhItTTes0gFI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R4Is1umd; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 30F8BC433F1; Tue, 5 Mar 2024 00:11:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1709597497; bh=jDt6Q8w6U85sQktq2l2FkbtnmqrlYD0Pcbf6MHZMO2c=; h=Subject:From:To:Cc:Date:In-Reply-To:References:From; b=R4Is1umdkmuM6m7v/lQdFXoZRpGd2jW5iowtkYZTvCtqJrQFvQHNLvJ1Zn31/nDg8 jomgmqbxh5F9T0d3vgPVNyfF4Kd03jsmeVfNG9FKuB+mRbUcNXUtkGaJ4Xcq/Vg42k DXNLGD0dVyqm2M/tW1+YFyITDKwd/Do1Lmatg9Kd1sBdoN7gAo3VeJp+c9PuEmtuuB Rvr3t2eX0RtRhDsfKFu8/iCCfQTno/Qpnz6Sue8hRaem84YDLRX6Ad5nn567tWFW8T j9uzMofTZpwtztgtqIEZRFFgat8Mp/Fki2tDha3yYIknOrNQ7QNZJsiELz3JtXsqAj DCE7F+lvR8qCw== Message-ID: <4000f063a5c4e41d863b179801682d796f0f64fe.camel@kernel.org> Subject: Re: [PATCH 3/4] nfsd: replace rp_mutex to avoid deadlock in move_to_close_lru() From: Jeff Layton To: Chuck Lever Cc: NeilBrown , linux-nfs@vger.kernel.org, Olga Kornievskaia , Dai Ngo , Tom Talpey Date: Mon, 04 Mar 2024 19:11:35 -0500 In-Reply-To: References: <20240304044304.3657-1-neilb@suse.de> <20240304044304.3657-4-neilb@suse.de> <170958874536.24797.2684794071853900422@noble.neil.brown.name> <170959178935.24797.7531672348129457687@noble.neil.brown.name> <477e896777379d9b060a735a3873e2ea3096f76f.camel@kernel.org> Autocrypt: addr=jlayton@kernel.org; prefer-encrypt=mutual; keydata=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 kZWuOsJdJQdmwlWC5L5ln9xgfr/4mOY38B0U= Content-Type: text/plain; charset="ISO-8859-15" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.50.4 (3.50.4-1.fc39) Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 On Mon, 2024-03-04 at 18:30 -0500, Chuck Lever wrote: > On Mon, Mar 04, 2024 at 06:11:24PM -0500, Jeff Layton wrote: > > On Mon, 2024-03-04 at 17:54 -0500, Chuck Lever wrote: > > > On Tue, Mar 05, 2024 at 09:36:29AM +1100, NeilBrown wrote: > > > > On Tue, 05 Mar 2024, Chuck Lever wrote: > > > > > On Tue, Mar 05, 2024 at 08:45:45AM +1100, NeilBrown wrote: > > > > > > On Tue, 05 Mar 2024, Chuck Lever wrote: > > > > > > > On Mon, Mar 04, 2024 at 03:40:21PM +1100, NeilBrown wrote: > > > > > > > > move_to_close_lru() waits for sc_count to become zero while= holding > > > > > > > > rp_mutex. This can deadlock if another thread holds a refe= rence and is > > > > > > > > waiting for rp_mutex. > > > > > > > >=20 > > > > > > > > By the time we get to move_to_close_lru() the openowner is = unhashed and > > > > > > > > cannot be found any more. So code waiting for the mutex ca= n safely > > > > > > > > retry the lookup if move_to_close_lru() has started. > > > > > > > >=20 > > > > > > > > So change rp_mutex to an atomic_t with three states: > > > > > > > >=20 > > > > > > > > RP_UNLOCK - state is still hashed, not locked for reply > > > > > > > > RP_LOCKED - state is still hashed, is locked for reply > > > > > > > > RP_UNHASHED - state is not hashed, no code can get a lock. > > > > > > > >=20 > > > > > > > > Use wait_var_event() to wait for either a lock, or for the = owner to be > > > > > > > > unhashed. In the latter case, retry the lookup. > > > > > > > >=20 > > > > > > > > Signed-off-by: NeilBrown > > > > > > > > --- > > > > > > > > fs/nfsd/nfs4state.c | 38 +++++++++++++++++++++++++++++++--= ----- > > > > > > > > fs/nfsd/state.h | 2 +- > > > > > > > > 2 files changed, 32 insertions(+), 8 deletions(-) > > > > > > > >=20 > > > > > > > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c > > > > > > > > index 690d0e697320..47e879d5d68a 100644 > > > > > > > > --- a/fs/nfsd/nfs4state.c > > > > > > > > +++ b/fs/nfsd/nfs4state.c > > > > > > > > @@ -4430,21 +4430,32 @@ nfsd4_init_leases_net(struct nfsd_n= et *nn) > > > > > > > > atomic_set(&nn->nfsd_courtesy_clients, 0); > > > > > > > > } > > > > > > > > =20 > > > > > > > > +enum rp_lock { > > > > > > > > + RP_UNLOCKED, > > > > > > > > + RP_LOCKED, > > > > > > > > + RP_UNHASHED, > > > > > > > > +}; > > > > > > > > + > > > > > > > > static void init_nfs4_replay(struct nfs4_replay *rp) > > > > > > > > { > > > > > > > > rp->rp_status =3D nfserr_serverfault; > > > > > > > > rp->rp_buflen =3D 0; > > > > > > > > rp->rp_buf =3D rp->rp_ibuf; > > > > > > > > - mutex_init(&rp->rp_mutex); > > > > > > > > + atomic_set(&rp->rp_locked, RP_UNLOCKED); > > > > > > > > } > > > > > > > > =20 > > > > > > > > -static void nfsd4_cstate_assign_replay(struct nfsd4_compou= nd_state *cstate, > > > > > > > > - struct nfs4_stateowner *so) > > > > > > > > +static int nfsd4_cstate_assign_replay(struct nfsd4_compoun= d_state *cstate, > > > > > > > > + struct nfs4_stateowner *so) > > > > > > > > { > > > > > > > > if (!nfsd4_has_session(cstate)) { > > > > > > > > - mutex_lock(&so->so_replay.rp_mutex); > > > > > > > > + wait_var_event(&so->so_replay.rp_locked, > > > > > > > > + atomic_cmpxchg(&so->so_replay.rp_locked, > > > > > > > > + RP_UNLOCKED, RP_LOCKED) !=3D RP_LOCKED); > > > > > > >=20 > > > > > > > What reliably prevents this from being a "wait forever" ? > > > > > >=20 > > > > > > That same thing that reliably prevented the original mutex_lock= from > > > > > > waiting forever. >=20 > Note that this patch fixes a deadlock here. So clearly, there /were/ > situations where "waiting forever" was possible with the mutex version > of this code. >=20 >=20 > > > > > > It waits until rp_locked is set to RP_UNLOCKED, which is precis= ely when > > > > > > we previously called mutex_unlock. But it *also* aborts the wa= it if > > > > > > rp_locked is set to RP_UNHASHED - so it is now more reliable. > > > > > >=20 > > > > > > Does that answer the question? > > > > >=20 > > > > > Hm. I guess then we are no worse off with wait_var_event(). > > > > >=20 > > > > > I'm not as familiar with this logic as perhaps I should be. How l= ong > > > > > does it take for the wake-up to occur, typically? > > > >=20 > > > > wait_var_event() is paired with wake_up_var(). > > > > The wake up happens when wake_up_var() is called, which in this cod= e is > > > > always immediately after atomic_set() updates the variable. > > >=20 > > > I'm trying to ascertain the actual wall-clock time that the nfsd thre= ad > > > is sleeping, at most. Is this going to be a possible DoS vector? Can > > > it impact the ability for the server to shut down without hanging? > >=20 > > Prior to this patch, there was a mutex in play here and we just release= d > > it to wake up the waiters. This is more or less doing the same thing, i= t > > just indicates the resulting state better. >=20 > Well, it adds a third state so that a recovery action can be taken > on wake-up in some cases. That avoids a deadlock, so this does count > as a bug fix. >=20 >=20 > > I doubt this will materially change how long the tasks are waiting. >=20 > It might not be a longer wait, but it still seems difficult to prove > that the wait_var_event() will /always/ be awoken somehow. >=20 I'm not sure what other guarantees we can reasonably offer. The v4.0 replay handling requires an exclusionary lock of some sort, so you can always get stuck if the wakeup never comes. We typically hold this mutex today over seqid morphing operations in v4.0, so if those get stuck doing something (a vfs_open or something?) you'll get stuck here too. --=20 Jeff Layton