From patchwork Fri Feb 7 21:53:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965984 X-Patchwork-Delegate: cel@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 862761B85F8; Fri, 7 Feb 2025 21:54:11 +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=1738965251; cv=none; b=nALN5tmpNl/uKnhuBZasuFVNM0Xq6AII9smmtS2pkhifKfrJFeiSVNNr+0jwDdrg+wO4UH9Zl19j9mhUa/ri6EV+Jvxx2GACguweMT2mK+x2/CfRBD6oYLCHv7ZaEmo5DDNQeKf72zZUnzOnkG81sTvPj3lgH7fBgHxqVlX5b2w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965251; c=relaxed/simple; bh=ACNGifbeZ+ONtm0L1jnSjfGOWX8cYHgyykUgaWIEXow=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DERPoR+FxDOBPj4Ilxr9m7EBJk5NL8BuZNOQ2QIfz9GGjg3VJV6920n8QhDo2/JVhEb3SBMI745ZxXBbzOEFQ1jZ9J/Ex8gX2K7r6hsqiBDrTaCx7NSvYG338xeCGJVjd6YKPXKIbE3jeUs3JJZhyeaMEPuZW4PopW7dsxEQIEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fgT7niFf; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fgT7niFf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 35EA2C4CEE2; Fri, 7 Feb 2025 21:54:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965251; bh=ACNGifbeZ+ONtm0L1jnSjfGOWX8cYHgyykUgaWIEXow=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=fgT7niFfRUjelhCc4P3AhBbeH2eHCiXiUpzH5aZ1tGYl/jnrpSFLpRCaJ6Owl9Cpn S0KhQ0DyOeyoZaRx1oQEiHOk226849Ra68rtKBU3STAMvYTZJyqf/B1cGZCLoa1sPJ mfzTkEuwG0pYXup9stjbr7taP88T1VJRvL7TyT0brZrxPu5vrI/4KG7wzr7Gd7zCq5 +VSh15yL9/Y4zIpIbpMigsGdIJ3XxmkJoAdw81JhGCT2THwu8d2y7dgkGuWeyQzpmp OF7H95u3OZ0Bl787iinPqnWD3iRI3Qc379oni1edhvQcfXLgGoNAIMiMnBqqGn3+5R bxmtPd/A8Sg3A== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:48 -0500 Subject: [PATCH v5 1/7] nfsd: prepare nfsd4_cb_sequence_done() for error handling rework Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-1-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2901; i=jlayton@kernel.org; h=from:subject:message-id; bh=ACNGifbeZ+ONtm0L1jnSjfGOWX8cYHgyykUgaWIEXow=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoD/WGlod4lP0+DqO02oPhK7wN+u7mmWdcaCE fc8Us81GsGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aA/wAKCRAADmhBGVaC FU5zD/0fH071PzKUBwi3Hb6uXLKZUajW25tY87rsY6xUMnKcNVN+1MpRvFcKZj3gCqTIjl8QXnY H2eYdtmV2zD6lJ0HcGpC3aTfxxY/IbyIZx6os7wi95hAeSTNTa8H/MCrV3hMFSiJHt1IcBAyWcr A0CNTFfhTHNr2N97WfAU+cXDYs09oNtQaAuuiUZm6PqP5AoxMfoBPhmEeX5Aq+01oWYYVLpq0FB jfB5KV3j/K6FG2iKsTq0a6UsOr2K5YCyDAW3IHsPsSJneMWqBpWwetXb1bfzWMOCcaXI8uT/6Jp F4Go2k9ZVdTQmaAcbz6x/mBCYZGq9MsPkGICkYrilItU7IlX1Dr71SFIM1aT6q/riw1rBm1tGK8 bT9do0ilOCLOM6vKhRpnkQyXOVfSBJ6jdfGZxSDzmy1vEsXsQy1n0zhcTyUcoTbTvG21bJch1WR vOLvHHFNN9b3t1wprjNEFrVqvpQ6nSe0cxOUQMlwaRAwYDjseSO061raQP+V3/08hl2nhK8AqpO EMp+RfSbEXxrHD6/wlmbGEnTyjW8lvO62PZ8Q0flIV6swjm3GSLiS/+TgznFAJRmQPPbEulTYbs MSalKI+pXC8n01JWKpkwI9GoUNg3VwyQTi6v6gWoi7eoABVJjKqIoaN/CzVXD4rtgOtvblmmyNN gGAOwTE34EqinRQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 There is only one case where we want to proceed with processing the rest of the CB_COMPOUND, and that's when the cb_seq_status is 0. Make the default return value be false, and only set it to true in that case. Rename the "need_restart" label to "requeue", to better indicate that it's being requeued to the workqueue. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index cf6d29828f4e561418b812ea2c9402929dd52bd0..79abc981e6416a88d9a81497e03e12faa3ce6d0e 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1328,11 +1328,12 @@ static void nfsd4_cb_prepare(struct rpc_task *task, void *calldata) rpc_call_start(task); } +/* Returns true if CB_COMPOUND processing should continue */ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) { struct nfs4_client *clp = cb->cb_clp; struct nfsd4_session *session = clp->cl_cb_session; - bool ret = true; + bool ret = false; if (!clp->cl_minorversion) { /* @@ -1345,13 +1346,13 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback * handle that case here. */ if (RPC_SIGNALLED(task)) - goto need_restart; + goto requeue; return true; } if (cb->cb_held_slot < 0) - goto need_restart; + goto requeue; /* This is the operation status code for CB_SEQUENCE */ trace_nfsd_cb_seq_status(task, cb); @@ -1365,11 +1366,11 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback * (sequence ID, cached reply) MUST NOT change. */ ++session->se_cb_seq_nr[cb->cb_held_slot]; + ret = true; break; case -ESERVERFAULT: ++session->se_cb_seq_nr[cb->cb_held_slot]; nfsd4_mark_cb_fault(cb->cb_clp); - ret = false; break; case 1: /* @@ -1381,13 +1382,11 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback fallthrough; case -NFS4ERR_BADSESSION: nfsd4_mark_cb_fault(cb->cb_clp); - ret = false; - goto need_restart; + goto requeue; case -NFS4ERR_DELAY: cb->cb_seq_status = 1; if (!rpc_restart_call(task)) goto out; - rpc_delay(task, 2 * HZ); return false; case -NFS4ERR_BADSLOT: @@ -1405,14 +1404,13 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback nfsd41_cb_release_slot(cb); if (RPC_SIGNALLED(task)) - goto need_restart; + goto requeue; out: return ret; retry_nowait: - if (rpc_restart_call_prepare(task)) - ret = false; + rpc_restart_call_prepare(task); goto out; -need_restart: +requeue: if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { trace_nfsd_cb_restart(clp, cb); task->tk_status = 0; From patchwork Fri Feb 7 21:53:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965985 X-Patchwork-Delegate: cel@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 9827D1C6FE3; Fri, 7 Feb 2025 21:54:12 +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=1738965252; cv=none; b=e6+ITlmXsvIs5TLwyJKpadeNaisj9mWqx/c1W5kdl5/ja+L5EovcR/eqXTcjM/rtUM7YDIhutJTpLCYEgH/2iM6Gd3J+Rp6dFxcQcyBzOyb7eyMEalVgHoKwnxCdI8PxzrmyJy90aqBHEt+DOUw7XJZsyTkeFiYXQ7kB0cxnJ5Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965252; c=relaxed/simple; bh=rYE4tMKbZCuJ2rA0LApyDiYeYob5TLUFY8D5uTiHLxw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MC/z6p9QYfC55Z+kUx6KdZYtDTnq4xfrtbKaMmbnOn/2mZaofslDMTuleBKiC2+IK0pDICDxC3it0n2LPig2mODnkN0EJRHwQ1vUwhxOOsdjTqKFiEXC92oYIwbWrF8DOQN9HDQBd/hzn75NXqxNI0nrKii1a/VJfbH7274NFmU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pDeCWKjU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="pDeCWKjU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 398A9C4CEEA; Fri, 7 Feb 2025 21:54:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965252; bh=rYE4tMKbZCuJ2rA0LApyDiYeYob5TLUFY8D5uTiHLxw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pDeCWKjUUxRak9aQhP977kJN5vCDcUAqusO2SbFqUypksUB7BKG3oV3MGO/PULRdK knOYPjUXPJgyZQNxGAqc3WKJhoUR1FBw8GYEXmKY0GzVpi6ejtEsptfGOb74CqonCy kRtuYZ017JOyoe9NZqhBUAI51v7xCckk+Hi4k0C8KCu7a46k7ReNlDWxMHvmRlZtfN XHicle2XqZUiti0X5CIbBTUjk8rOWO1LNkFksvf5hHjOF2C63lWsoPtZIKG1U7t5ND fVyOECNvZ09HDw/KscON2ZH99RvLalPvW0QQ2UsjVgZzHIMH/niTS/wJp9MJsxixtA Ot8xcRjMsdjSg== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:49 -0500 Subject: [PATCH v5 2/7] nfsd: always release slot when requeueing callback Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-2-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=851; i=jlayton@kernel.org; h=from:subject:message-id; bh=rYE4tMKbZCuJ2rA0LApyDiYeYob5TLUFY8D5uTiHLxw=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoD/LVLzAB0xbkqJvMrCMkDu31EnQPMS2VWoR hkX0SeavpGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aA/wAKCRAADmhBGVaC FW0KEADFmws4QYmEHY864MGTRyco6si6KjYIc1y+9qBmxwObmBbspi+GIZnySKb4Dz3wvMMTvWN O9zAV19oo5U9ZKj22fo+7ez9xwmKbnUmiB7R4XJ2w3TyApbPvy5fyvv5W3BCbGFlDUrYR+T4iI5 TiYMvOeM4sQNHRsZYgNJ8nrUnFHEFcuSqRTKmLj78XFffPty/EiQGPmz+KESFUgE3LCld761up0 pafRCo6LXqlIbmoZUjhQEPhLaQYQGphPyFoRLHo15V5Nm1R/a32osU5hLbXO4GwccyT5zmqb1Ko j6EtPJonKJhiXUPLoXHoeiSuRBkWyw0X44PNcrD/IXtrap7hs0QpeZtNFEmGkTmhiWa4RDp+tdV yuAGWzKPSofmyYB1ApyJPl87JTWUkfQo/JDnF+wA4hgHFD8bYeJWvfN3TLrb9YMt3DNUgmDJ3g/ GjII/BJ1qk2BsWp4RW+Wr0o2RcfsUf4ui/3wfpbeV2TzEB0ZnjCoQzdC8DOnDFG+1HpkQqoRmID CADX8EZ8IXvp8LVNahAs1F9Rs/0DONDB2JuBrrqQdBKmxpDGTMram3Zm2/8STMTyrFFegpmCWTT sADFIm2cvGTDvxXdrIMnUW18o9GbMfXbN+8zVoNZ48C3VbN9DjhOHD+rFfMUvhUlHf2n8SYtqCo fwFHsYJC5XfmfXA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 If the callback is going to be requeued to the workqueue, then release the slot. The callback client and session could change and the slot may no longer be valid after that point. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 79abc981e6416a88d9a81497e03e12faa3ce6d0e..bb5356e8713a8840bb714859618ff88130825efd 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1411,6 +1411,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback rpc_restart_call_prepare(task); goto out; requeue: + nfsd41_cb_release_slot(cb); if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { trace_nfsd_cb_restart(clp, cb); task->tk_status = 0; From patchwork Fri Feb 7 21:53:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965986 X-Patchwork-Delegate: cel@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 21B111CAA8A; Fri, 7 Feb 2025 21:54:13 +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=1738965253; cv=none; b=uRpYlOV9SW9LRO4TYCzS6skMr97ldQuLKgdEC26PCDoDx4Ydwsv6dFsBrQG7Yck7fNIjC/AFFo06KZIf1kyTsqrf7wqsf5ZzXhcvWOG+bpCf9xdamXcSCQsAnjlZ/Z2dOP4QUq7+dSWTOnHKEx47kEHIVh6WKfZaYI5EecoibSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965253; c=relaxed/simple; bh=ebDzGzBR9ymwDefoCIAS8rZwgrFgMi9uVhnzOaYB/Ks=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GDvYeYaoSeT3SvJXaCLX4lTjqtTIKRqfVC7NViVqDikjJjNXQzvDCeHX+HVX8VqauU+cErzX6E1J5+KOVbDMSrsVb5x3Yb8vZxUmLbesIqHECSWIZ1bVF9PVhWnsVRgcx5516pxO0bjhH2Egx7x1U3CTX6Zk331gKli65rb2K6U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DM2Q3DaR; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DM2Q3DaR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3BDB5C4CEE2; Fri, 7 Feb 2025 21:54:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965253; bh=ebDzGzBR9ymwDefoCIAS8rZwgrFgMi9uVhnzOaYB/Ks=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=DM2Q3DaRVnlAz0Jo04PhQ9wS8IoznOrMnU7ckq4prBgRZYlRavY0VLhQh73mMysOT P8+31coYt9OPZETCBUBr8IP38cRyqcpqh3II/30ruG3xIygxulHLFpz78me/HSOV7P mj2KX5J4NZlk/ObCrWDE20cSrfRnNAIyHPdtdvWq5tk/WzU8VTIX4wrAuxCEPNpX+i lKL0HiRGw3C2ztcV7E0KcBgrfnZmn026HlGokd8/h8B2JmT0h+4NsqiPRrmBByAnNU etwPY1fj1v86OtkGnCR93AbDYjJd9fN6ETe0Nh6ImLGDHJvKjLFYPUQpNYpL2R2PnB ft72+i1CiXzUQ== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:50 -0500 Subject: [PATCH v5 3/7] nfsd: only check RPC_SIGNALLED() when restarting rpc_task Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-3-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1908; i=jlayton@kernel.org; h=from:subject:message-id; bh=ebDzGzBR9ymwDefoCIAS8rZwgrFgMi9uVhnzOaYB/Ks=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoEA3ClMxUXuT5UxrKYb2FVYdAU9cfiaKCRZw GJVxE8h12yJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aBAAAKCRAADmhBGVaC FaC1EACVjPoOrSwRxQUMysnEeXIzOK6kERemv2IsRrkMKOqssL1pHScTKaHlR5v5/OGKEVAc0BT 12Q2BYpVws9OMjgKc1OEP0MuNSEpJmRq2IictkwMlKudEFvzRjIP2kBz1+hogsURxkUP+xdSdSA coTmMxGDZY1KR5+X0ad2qAyGMI6+2HLDhmFM0wkY7+ZHen2tgLkOaD8p3pJSHFyoxs76x2Jp0zq gfO0eftNxpezCq8HklVgQtCGew8yXpWXlC7nEe+tPUiMezXelZrSP+so1rUO68syR+CAmeJTNYL SntZ1FLxrMvJegoRKVjOdunpAYTal8gqHqlQtPAKlXMV6iNyloB0+ILgYOGKi5US9FGpaZwTmMY n9yCJK+uRT1SAmOajQJtOHvJkyYXh+4BKPhkahJY8BOO4EQSItqzAUgskVscF+RCFrdHxAMtayr hTZwKFda0qg3dzX8wL1DeUtauKTX/cHbRQttKoJcYwsTkm9B3iFP4XNNTjk3NcMXGAAT6SCXp+C jMffOO7x6ohFJAmsJQW2AMjYVXGD5AextdP6/gh7cMx3pnU/uuCG85yitf87QGPN+VJ4cP2nQ/V RMFpyj2t2zfurhEoZGMxGk2t4P4J5DSN6oh7RULpGcnPgwH72kaGAPiZUXPdMQ9y6mVXItwwz/G JhM59pcvEB9iQJw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 nfsd4_cb_sequence_done() currently checks RPC_SIGNALLED() when processing the compound and releasing the slot. If RPC_SIGNALLED() returns true, then that means that the client is going to be torn down. Don't check RPC_SIGNALLED() after processing a successful reply. Instead, only check that before restarting the rpc_task. If that returns true, then requeue the callback. Also, handle rpc_restart_call() and rpc_restart_call_prepare() failures correctly, by requeueing the callback. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index bb5356e8713a8840bb714859618ff88130825efd..1e601075fac02bd5f01ff89d9252ab23d08c4fd9 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1385,8 +1385,8 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback goto requeue; case -NFS4ERR_DELAY: cb->cb_seq_status = 1; - if (!rpc_restart_call(task)) - goto out; + if (RPC_SIGNALLED(task) || !rpc_restart_call(task)) + goto requeue; rpc_delay(task, 2 * HZ); return false; case -NFS4ERR_BADSLOT: @@ -1402,14 +1402,16 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback } trace_nfsd_cb_free_slot(task, cb); nfsd41_cb_release_slot(cb); - - if (RPC_SIGNALLED(task)) - goto requeue; -out: return ret; retry_nowait: - rpc_restart_call_prepare(task); - goto out; + /* + * RPC_SIGNALLED() means that the rpc_client is being torn down and + * (possibly) recreated. Requeue the call in that case. + */ + if (!RPC_SIGNALLED(task)) { + if (rpc_restart_call_prepare(task)) + return false; + } requeue: nfsd41_cb_release_slot(cb); if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { From patchwork Fri Feb 7 21:53:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965987 X-Patchwork-Delegate: cel@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 8D9031D958E; Fri, 7 Feb 2025 21:54:14 +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=1738965254; cv=none; b=p/9AbNoIr+gLdNfsdGsCtLbVVyirDfKjvAHE6hWaDEBO32U2UDcsE12+PXCxI43RjLioR4JMV6C5Y5i2mNidk0naeCsEWOACfVaaoyVqdvwfJApoMaiL/rpB+MokDVURA43b8WABvjWVMPGLJJB+A0hnYkzhZ+2h3zPVpHvRb3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965254; c=relaxed/simple; bh=WkackGrGMoGLipWj2QIgI9MXLbcBGVQWZmAGTjaaZQQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FZSawVUmIfGImJ8BhU7X8FmCI0lyCdm3/gxDfm27EwczFX8TAOS0gY7r6lDslTHfNXjvBY2FOemhuHtWKdBmXajEs/Y2JoZQlRqnybsnlwfHmYVZFRae8e4bFv2N0MBIzFIJJZoo0dBBzf/kWxFlFct0TW9c21ATl2CM5J4wU6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QHujIiPb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="QHujIiPb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3ECA3C4CEE8; Fri, 7 Feb 2025 21:54:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965254; bh=WkackGrGMoGLipWj2QIgI9MXLbcBGVQWZmAGTjaaZQQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QHujIiPbcuNJ2QxIbFwkLMY+EfhNTOkjo6rTkfzK86kUYUIiIcEGH1du2b8FhQ2av +zA/pXks6xmme+d25+8bqS1s4gi05jqf3Zc+H0rdJp4cbTzL4YJcfJQJgEkvq58uWn UDa6lrcFDAul02lQgOgPQCd+5kK0nlt9/sXIF46iCCEab1yf2nGr/SHPYefTfJxLfF 18x+m6wGUtKDbdGy1aZq/Zd6IyyhWYidWmoUK5Uq1SQxB0+qaqy5ZYE1Zrk1SNsn+U O7QqzLHXeRbK93yJQ9tHQa+84u2DQ9LAU8x6FDAcrcAV1O2BWhdzqGKdB5tPqK6OsM 4Ce0TA5Kx/+iw== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:51 -0500 Subject: [PATCH v5 4/7] nfsd: when CB_SEQUENCE gets ESERVERFAULT don't increment seq_nr Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-4-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=992; i=jlayton@kernel.org; h=from:subject:message-id; bh=WkackGrGMoGLipWj2QIgI9MXLbcBGVQWZmAGTjaaZQQ=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoEA88xU7j4Uhr2L7Aowh25dW6s6jKoMbj6pp CEdNjJjEqmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aBAAAKCRAADmhBGVaC FeRiEAC+OGcli75lZBFUjeT3161+StQze9nUSaz5mZE3H6enKR6pJv5VZXOTEvLBXbYwyMvogzr 8RO1PzczpSf0lqjqBnkHQI2PT0RJjSdbVcuGJOgpEjafcxt9pxSksknSTC46Sh3Z5YH0Yeh9a4h p0n5608nUb68iIGuGlymvrXbJJXVVfWteO/MXO9KhC7nORU9x3zAUm4G3+o9NveHrzEsLEv+3ay ibxbqUjjTdd1zJhQEeTzlWZUSTcKF8W88VzZq/tZRB10aYjZBbumAAaAQrNx52DuMF6R6OlKxie s/88N9PrQ3+fgjPblJmHMkd5j97FrkTPvUnyj1KCs4KnnhTYzKZDUwaKXUfFtPlME9+6RRFpA4s rQhJT0T4mqUwOQ9k1agic+kdX97JLW+2B1/lYBqa4sTtXBUXgLFyDo7XniE1PlcmsmFa5EyMpWL +2kYq18alTQuKBsvZ9xi5YAp2zTfd+wDfwWxIeEEgPZmE/x0+/pdmXVslnp+WLsrWjxvnM/qSCi eLza1RCTxjukDcHuFwokaKsS4CJ60epG20uTpqwwGLXNkr72IxAY40kC5ogEJDxbDN3RLGRxhVO 5A6bh7WKaGGY6YfHxJ6u18s6nIILoylez51U0WUV53BYI8kkWEzwv2zPX2DNSH9AEMNNSNr+aoa yOaIgjEj5XelDrQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 ESERVERFAULT means that the server sent a successful and legitimate reply, but the session info didn't match what was expected. Don't increment the seq_nr in that case. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 1e601075fac02bd5f01ff89d9252ab23d08c4fd9..d307ca1771bd1eca8f60b62a74170e71e5acf144 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1369,7 +1369,11 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback ret = true; break; case -ESERVERFAULT: - ++session->se_cb_seq_nr[cb->cb_held_slot]; + /* + * Call succeeded, but CB_SEQUENCE reply failed sanity checks. + * The client has gone insane. Mark the BC faulty, since there + * isn't much else we can do. + */ nfsd4_mark_cb_fault(cb->cb_clp); break; case 1: From patchwork Fri Feb 7 21:53:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965988 X-Patchwork-Delegate: cel@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 2FC6B1DC9A8; Fri, 7 Feb 2025 21:54:15 +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=1738965255; cv=none; b=KpbKsbxDN2N7lhu8Jp01tp1kYTAlTArUJn7wOqrK8OUs9qpbLdva0zSKhT5GXjGiGbSzt/a9wmnIoGE1az/dH7nr7U3Tw7wLMDdbTM+yjpXPtGnhyVW7kmlEqIJLeV3BnVCHbc80HiLMBo09GYhRZJX1OZLOHRDJfr/qOTybChU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965255; c=relaxed/simple; bh=YXJoT4BWpH3GRiMc2XyfNBEcE1+0tC/CS3n5yfVPGhM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VqfLdqL0KFaRVeOWwE4zz2Xpdd/S40lj2OWWbNQY+7bm7Uz/wNM0wsuBiiGKNq1RVzNnSg7qqfSZKs7PZnH13G+8E2zLwkkzKA46syOr5xAU8BG+g26LfWnSrmfB2Q8H4n7iuKn2HUhbF0x38MAjSKun36Al+Eom81o3Vrtttzo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Bx5QNiu8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Bx5QNiu8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 44928C4AF09; Fri, 7 Feb 2025 21:54:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965255; bh=YXJoT4BWpH3GRiMc2XyfNBEcE1+0tC/CS3n5yfVPGhM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Bx5QNiu8OZk7oG888QpY2JInk+q9F0WMrPA1pYPrF/FkiOdH9GBEzJ8BFjk6v66Ry auJqINygxXyUe7S3coNi594VJpHZeuOoEXtknRg6Ehlzh23XbUvqV04uy6Pmq8Bg6J ZVqXCjcgAeQa3lLdpY+JpEdLnpcB1MOL6hMymRu4HX91SXXX29VPdaqX/C5PPtqEMF jjbzn/YPawuclqzWNq3dA0WrpBsayTR83jPcs1f9+J9OAQ9yZZdxrAOT5QuhKZreHb PpEE5bSPlKQSQv6Xw7zplJ26dJOymaXYg35klaAin9jSXeFRjxZUgZIWywTIozd5fx y6VgOKXH8+7vQ== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:52 -0500 Subject: [PATCH v5 5/7] nfsd: handle CB_SEQUENCE NFS4ERR_BADSLOT better Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-5-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1018; i=jlayton@kernel.org; h=from:subject:message-id; bh=YXJoT4BWpH3GRiMc2XyfNBEcE1+0tC/CS3n5yfVPGhM=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoEAxJvD3XkScIfFRkfDkG31HTWMZ/Z1AEKFs rhrpyqx8ICJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aBAAAKCRAADmhBGVaC FfKPD/9rGaYsdWg5mUVUlmA83GYJ2wut7eb6+zM2bZuV850BCmfVmCsnPJuivyCaprTuCM9y/+P Bq9ZS+OQlZyV67t9dgHkfJ0wYR8Wg86tmmkDCdJVX7TCKgv+O+qVmR4gswWBinr+yhyc5RIaXjF by9JSAWSYa9pp2qElZ3QbhwcZ8eI2pGc6KE8zOO/K6QG0f3BXugvW/yYxA7Q0gA+5YzRm7TkDhW /Dri7DyUltat2nU/un5mDoL5+z6fLr5qTbCFPgT2cyDqhgNw9DHiUntn04QetCDrfWhnoNBTsU1 0b8/q0gx2mG+2wtvDVcy35CUeZZyf4b2rbn+V5zqSz//4FBogLgjQytVyHNIEaGjdsWjzy2tPgd RHQ7XHKSicjBunFceOSKCDPfYV1x8iMmLsAl1zpLHzAeJWkiaNBDIg303IDIRj5vbX3XTehQ7mM zq0mSTbjvjNTrRqwqazj0NIlhEM2tziMbWlNfPZiH1o22Nybkc+AxZfNBk0Gee+ZnqMhqfF9cxz S01ZOAxhbnlus8khIlztYINlQ729tXiD7d80XpAlZ+3AJrdANI36VKusN5Ec3Yyb8TuF5+hhHda QKBSci/vF5EtPGEDMDWlMTVpPL0brJpJQh7eHILcfOgWsffBXVg6TZOQfGNZj9IW8stWt1Lw0gl LW4nSa3Aw/uow1w== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Currently it just restarts the call, without getting a new slot. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index d307ca1771bd1eca8f60b62a74170e71e5acf144..10067a34db3afff8d4e4383854ab9abd9767c2d6 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1394,6 +1394,14 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback rpc_delay(task, 2 * HZ); return false; case -NFS4ERR_BADSLOT: + /* + * BADSLOT means that the client and server are out of sync + * on the BC parameters. In this case, we want to mark the + * backchannel faulty and then try it again, but leak the + * slot so no one uses it. + */ + nfsd4_mark_cb_fault(cb->cb_clp); + cb->cb_held_slot = -1; goto retry_nowait; case -NFS4ERR_SEQ_MISORDERED: if (session->se_cb_seq_nr[cb->cb_held_slot] != 1) { From patchwork Fri Feb 7 21:53:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965989 X-Patchwork-Delegate: cel@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 2EC1C1DE2CC; Fri, 7 Feb 2025 21:54:16 +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=1738965256; cv=none; b=r9unPYrkMNqNZqDMiANR1Ly6kq7akDRGBC7plky6qulyktnTrDy1wI49/n/mpmtVZ9/xwW8g1Z5lenaQAAcsGq5Dzb9tMttpQfn9ekfjiYy+wWaNDnzhyugcWtYA1vc8BYyolyQ9fuog1w9xDR4o9kqmPZ4p4sdSEWcE9sK4Dzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965256; c=relaxed/simple; bh=oPws4x3e9piLVyLvn8I4bBJFo9KyftEBuoX9giMl7eg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ACi7WPx7b0Nfe4UoYNfUIA0aWzGTvZuhsO+itb4wuxEs0EMl5fv4QyirFdJYwp3Osj/K0opvHpuFva+D5VwbfIOaiJCZxRmc2bXEKq1JSTU00h1KuzobgenpNRmi9hHYVPY+iqerY3BrsZdcYix3RcEoFIFUELarwk+/m+appug= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KnVnhOBh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KnVnhOBh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48D45C4CEE7; Fri, 7 Feb 2025 21:54:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965256; bh=oPws4x3e9piLVyLvn8I4bBJFo9KyftEBuoX9giMl7eg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KnVnhOBhlpsBUbEXx1PxgU8XbOC9lt1O/obDk7iCqxLgQnIT7mB1H4Wt8tD+uZBD7 0AzPT/cgkN1m6RtQzF1IIzqBl4FKv6utjX2yNYUjnRTGEoIDN++AFuTeoKbLDGKq6t njDW+j5mtQ1JPSNQ+sdqndhRWFhcM4mRwwqEXbrzotFaG14vyzwgWbLTtnsvFwFbbr zYirx8JQ+IXEvVy9+WrRVtpPPi8ooUKfjwjMyYBAerBBfB6P+L4OEEl3S4PmyjKBov 0jZg/MsQgGwVqXwl7ogrfr9B2oT4JU+yB2xzExjtid+c/sG7mBJOAdfZp6yiFndr5w rur0VXuPcwgPQ== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:53 -0500 Subject: [PATCH v5 6/7] nfsd: handle CB_SEQUENCE NFS4ERR_SEQ_MISORDERED error better Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-6-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1495; i=jlayton@kernel.org; h=from:subject:message-id; bh=oPws4x3e9piLVyLvn8I4bBJFo9KyftEBuoX9giMl7eg=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoEAM6gcDh42VCq9WBeoZ3WOXXJr5RN0tMove 5VQ/ObI2VuJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aBAAAKCRAADmhBGVaC Fb2eD/9FT2EJBK5nqGrUEqiPYmYUNQXMSjKpKwKTNbERWHnpDXbpZ3p+FJS4kgKQJWg7mewg8UJ VpKeRkqnfTz7c6ftwgK14OhSbrd6xmeSeMByodd8tX1ivP3W7IfwDS4RCr876+dCaFJaE4t/Wsu YgsXz+defvJUIxq5uVmW0jxLbK4UZd0Owqx7+O0lee6DqzSCBHICdq+dYQ+juTB41/Q6Qvb/jle jJTbOX8DX5XexEeHgTIKD9GDbWq/de30lGNfoGDbgg52wU++E9Fw07heZUVj2oMRo0KNEfUuG3E glVCOwVXy7PPaatmFghY7Zts//SwTIPaDitk6XGT+03prTGgTRWPRu67NRpQJMmzpjIRT6Q3PQB pUGLBReQ0fDsB0xEBKDw+rSr80ETIcF4+Vtoq6P8jT6Wzn62Q1xj7HiF+qoKLTEeTRqAq/fFfpY 7CeLZAO7rwwGc9i9/1F0VJzKq0+MmHqFWaaZvWYFioVcrVj/GJc6gH6E/R31FqrHRQBYBAviMVk qqXrij2lxJr6p5JhwlGwkYfRTFpDBToWV3PgMhOFZ1ihpkBZV8vlNyhaQHdZLRTeQBd++a053Bl nDgTYWKOm6upmx3WLEhNpDIFx2boYV/jXLtxD57+Vi9WvqVsFq0o+pweKcJnj3Dpz3fvopwHwWY JkAjD5Sw0pu38gw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 For NFS4ERR_SEQ_MISORDERED, do one attempt with a seqid of 1, and then fall back to treating it like a BADSLOT if that fails. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 10067a34db3afff8d4e4383854ab9abd9767c2d6..d6e3e8bb2efabadda9f922318880e12e1cb2c23f 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1393,6 +1393,16 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback goto requeue; rpc_delay(task, 2 * HZ); return false; + case -NFS4ERR_SEQ_MISORDERED: + /* + * Reattempt once with seq_nr 1. If that fails, treat this + * like BADSLOT. + */ + if (session->se_cb_seq_nr[cb->cb_held_slot] != 1) { + session->se_cb_seq_nr[cb->cb_held_slot] = 1; + goto retry_nowait; + } + fallthrough; case -NFS4ERR_BADSLOT: /* * BADSLOT means that the client and server are out of sync @@ -1403,12 +1413,6 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback nfsd4_mark_cb_fault(cb->cb_clp); cb->cb_held_slot = -1; goto retry_nowait; - case -NFS4ERR_SEQ_MISORDERED: - if (session->se_cb_seq_nr[cb->cb_held_slot] != 1) { - session->se_cb_seq_nr[cb->cb_held_slot] = 1; - goto retry_nowait; - } - break; default: nfsd4_mark_cb_fault(cb->cb_clp); } From patchwork Fri Feb 7 21:53:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13965990 X-Patchwork-Delegate: cel@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 9423D1DED6F; Fri, 7 Feb 2025 21:54:17 +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=1738965258; cv=none; b=sELe3x0HEve1YtDb3s9sauVZUFp8BhnNYfdGjQek0RTUHYdT2fAcLxqVheoVrQWZDoIBi31o1H1Xc7VKaayJWcJ51TgUXKob61kpbWpSKyxBrkuMGB9xbI9Bl3YDgdb08a9I+RYQTJ8sO4JAgITceVD+vs6c8Cr9hQf8wb4GPDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738965258; c=relaxed/simple; bh=sw3t4UEP7cS6Upg9M0jFnw3ef2OfnvBcdxBl8UpLg2c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=j734m3CWAC6xjVAEKvtyO69G8hc7LWJey1yNBwUzAvepVmZdE3JiB/ba0Yp+18DddfIL4zKKZP1x3grZaCOx9DFuFss+HpuV7GH1lFvW4rKQ6hCnyfVaKKp9kAzJqyzC/NmEhCbK4JHgCUYkWS2gD0dffWzNO4Y2Tdw/KnQ/k4g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NnR0K361; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NnR0K361" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B7A7C4CEE2; Fri, 7 Feb 2025 21:54:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1738965257; bh=sw3t4UEP7cS6Upg9M0jFnw3ef2OfnvBcdxBl8UpLg2c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NnR0K361Fpl1TJaDSbJGq4CrwKgS5t5a40pDaGnH+z3gczCjtbmVHcUYDJGH1F7zO A937Cf6YHHj7EJvhbdy+jaTW24Trxdf9CkVFUA8Py0KtwDQ5W3k1d9HyPvy4q8QBK8 xqaTT4yQlqcLVwZR7dg4V46IaVGrbv89v6csEewmpoHdAEPIhowjqoDz4ryXTkwzBo ZxUhh09m13RiaBu8rxt7fEpS7JMpSeWkmafoeJpuyFd6EQ+H/JHyMn0dbjId+WfMDB EUqIHXqTz55TA1EWbOtk1Yf7EQLBs5cSxUBStWYObB1tJE4AMq1rYLKLyrrEIx55kp oxNYBMTSFZuvA== From: Jeff Layton Date: Fri, 07 Feb 2025 16:53:54 -0500 Subject: [PATCH v5 7/7] nfsd: lift NFSv4.0 handling out of nfsd4_cb_sequence_done() Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250207-nfsd-6-14-v5-7-f3b54fb60dc0@kernel.org> References: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> In-Reply-To: <20250207-nfsd-6-14-v5-0-f3b54fb60dc0@kernel.org> To: Chuck Lever , Neil Brown , Olga Kornievskaia , Dai Ngo , Tom Talpey , "J. Bruce Fields" Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3143; i=jlayton@kernel.org; h=from:subject:message-id; bh=sw3t4UEP7cS6Upg9M0jFnw3ef2OfnvBcdxBl8UpLg2c=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnpoEAjCKIMrbArNfq0hu5S+vxyt8rkgIcUPuaW 0K+BBXv3zuJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6aBAAAKCRAADmhBGVaC FR0mD/wOdfIUVs6Eg7jAxtHDAXJAFKS6/DT+Uuz8DcwwE5xLW41YbqUkq29i3ahJufRcV6hI4QV LdAyoeVrBJZell/EEYNn26PaLzA0u2Dm6DIPSz5Q4WycxXwCjRRJt3RTThHBmBBdXO++9r7eut/ UmX8pmjFEmVxmVRjTDre0KacvXaq1VeaeAzvb3P+N3h7+B4hk5pDHOhhgTx1IaK/e0bqb4LIUlr 4GpPhaBHwVHv+gSd33vZIXPrxDfZtkl9dQ5ylGr4AeFYRq0HRrx8q9/dEcaEG3dTvCYWUUIXqx1 C32bxJyEpwo/7i8BkFBIponsgP+BF0BSZI4t5nevbfU92fT42EaZjpBTDIgKHaaB3H+KCf/GWqr orKcYZglWBZMbyXM9Pc9/x73tut4aI2ADRDBWduK65W2SqvZ89yZevy4eUl1uQe20CauTZwPFXt pJwNb17kDoikx6HdCJgzkkdAk+kM4R7m1q2v+Ck0TODvWahjuRdXcmu5PoADO4uTc0sMMSGHUPE q1MykCG5Gngc2QJ4ZlNJbG5t0XmMxqsGUwieD16gXPsIbSjZsLcyW1AZrMmAC058bluQClLXZ9g A2rF6ZLaH/Fanr5Xs9FhqsC1JKgKuE1DwxCB6u2RYMQGVk3DmmZHZkuifcFQY2hgq1DFZ17R1DD bkuOPZan30BA83A== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 It's a bit strange to call nfsd4_cb_sequence_done() on a callback with no CB_SEQUENCE. Lift the handling of restarting a call into a new helper, and move the handling of NFSv4.0 into nfsd4_cb_done(). Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 53 ++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index d6e3e8bb2efabadda9f922318880e12e1cb2c23f..a4427e2f6182415755b646dba1a1ef4acddc0709 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1328,28 +1328,23 @@ static void nfsd4_cb_prepare(struct rpc_task *task, void *calldata) rpc_call_start(task); } -/* Returns true if CB_COMPOUND processing should continue */ -static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) +static void requeue_callback(struct rpc_task *task, struct nfsd4_callback *cb) { struct nfs4_client *clp = cb->cb_clp; - struct nfsd4_session *session = clp->cl_cb_session; - bool ret = false; - - if (!clp->cl_minorversion) { - /* - * If the backchannel connection was shut down while this - * task was queued, we need to resubmit it after setting up - * a new backchannel connection. - * - * Note that if we lost our callback connection permanently - * the submission code will error out, so we don't need to - * handle that case here. - */ - if (RPC_SIGNALLED(task)) - goto requeue; - return true; + nfsd41_cb_release_slot(cb); + if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { + trace_nfsd_cb_restart(clp, cb); + task->tk_status = 0; + cb->cb_need_restart = true; } +} + +/* Returns true if CB_COMPOUND processing should continue */ +static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback *cb) +{ + struct nfsd4_session *session = cb->cb_clp->cl_cb_session; + bool ret = false; if (cb->cb_held_slot < 0) goto requeue; @@ -1429,12 +1424,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback return false; } requeue: - nfsd41_cb_release_slot(cb); - if (!test_bit(NFSD4_CLIENT_CB_KILL, &clp->cl_flags)) { - trace_nfsd_cb_restart(clp, cb); - task->tk_status = 0; - cb->cb_need_restart = true; - } + requeue_callback(task, cb); return false; } @@ -1445,8 +1435,21 @@ static void nfsd4_cb_done(struct rpc_task *task, void *calldata) trace_nfsd_cb_rpc_done(clp); - if (!nfsd4_cb_sequence_done(task, cb)) + if (!clp->cl_minorversion) { + /* + * If the backchannel connection was shut down while this + * task was queued, we need to resubmit it after setting up + * a new backchannel connection. + * + * Note that if we lost our callback connection permanently + * the submission code will error out, so we don't need to + * handle that case here. + */ + if (RPC_SIGNALLED(task)) + requeue_callback(task, cb); + } else if (!nfsd4_cb_sequence_done(task, cb)) { return; + } if (cb->cb_status) { WARN_ONCE(task->tk_status,