From nobody Wed Oct 8 01:59:40 2025 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 3AE912FEE23; Thu, 3 Jul 2025 19:53:28 +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=1751572409; cv=none; b=jCMA7aM0ZS8kkenlOFerzuVmup/xgD3rBu6XqjdKMtjAf0isD2pmSU+NlTqDSSrUAAHgm77xvDlzh8zRLocXmrJMzeYClWckTnotArNl3C+VvuJaeof/wqs/otbQdmTs0I0WK6O9V+znoZFxiIIQc6F91GQZ53uuSClP62jjgUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751572409; c=relaxed/simple; bh=HKeoW9KtUJiIjEPGllHFJTUrbGUFNAdPHChB/1LE1vk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hyGPm8UR7ZWVXvFz13zneOVa/kaKzn3RzPn8M50MaR6LmPlo7CFt1W0ofNAn/Amjd+Wxvoy4YZJcr4Nr5yDa0nwZ8SDQsAsBq6/2EFx90R0f2NC/GCjfv5qhGAi08ss/fLizv6hoMFmAeFhU4sV0ysC8mQezuzKuhcm63I7I8HM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qh8/ZLHR; 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="qh8/ZLHR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E18CCC4CEF2; Thu, 3 Jul 2025 19:53:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751572408; bh=HKeoW9KtUJiIjEPGllHFJTUrbGUFNAdPHChB/1LE1vk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qh8/ZLHRhjh2GWaXBw7kTfLOOTKXHCWg7p6BDI4UkkbeZ/Vqq01YvYP20dHSNYGyn oHOkiX+fL0Oy4NMi9UiVkfccL096WxCPCToLYG1UGBENZAdKsFdWB7ximZumB+wVQK ypBtFKpea0N2g21fur5hi1qbzAkCE9dyDQXp8MaFHKQTKPT1ckgDCjKuJJxlaxETjk xWE6gYSEyMZBRQnNVTbLbFP1pzihFuPmf7/J56V9AyT0Ne7wVdbmwkhOCjxCXfWcBv 3yPZN5ZS7csfctMicv7F40rA5ME3fAgEPBlQSEjMNo/9ChkfJ4Pu6kVDDmRLUYa5Kd ozNTOXcKIMdSw== From: Jeff Layton Date: Thu, 03 Jul 2025 15:53:12 -0400 Subject: [PATCH RFC 1/2] sunrpc: delay pc_release callback until after sending a reply Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250703-nfsd-testing-v1-1-cece54f36556@kernel.org> References: <20250703-nfsd-testing-v1-0-cece54f36556@kernel.org> In-Reply-To: <20250703-nfsd-testing-v1-0-cece54f36556@kernel.org> To: Trond Myklebust , Anna Schumaker , Chuck Lever , NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Mike Snitzer 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=2536; i=jlayton@kernel.org; h=from:subject:message-id; bh=HKeoW9KtUJiIjEPGllHFJTUrbGUFNAdPHChB/1LE1vk=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoZt+26Q/6FhBph5XRj0g3eQLABzh5R8vxmZX9S n62uZwjp6KJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaGbftgAKCRAADmhBGVaC FdWvD/4t6rSPB5chu3xDcvAo7m9dNqmao7LA1bEsQlq2FkUeLT+KCKgbWg0SHImEXKjRq8SRUr0 X2mhxKxgsdygQTjlnlmwRyvrfK8Dj8g9tR0guYY4gnQvhFIjIc2SwvVgvK7UoS1K88SgNrBO1lU XyI9UPmRv3Q89GyKyz1vx1nCG0WO2nuYh4D6v4F3X8hjIZDtOdmf07IQHvvdx/5eKqOyhfr9WOg EYLnV1XL8Ld4m1EIgg7PHSKfkBZx/l8kdni4McqQqliRn0fzIban3eyYC9dl0v7Pbv4PMs/NtyO oPll/PBhIKQEbj7saR3CdkDqEEhDGHHa+461x4sgdgMta+ySstsTd6BXnrx6rBFiCkU3VOssnyt pnfGCzFyQr7d3Htl+RLX/REzbF5FDmtK6D6vouKkNg/PPTIeA9k5ilTm7FevGHz6cfUZ/mAGO8k wx+yVQaS0410iADF4/Gc/KmSvQMC6V/rznoT7SF5rHZYnhBGu60SOCSWIWFq5CEk1hTychPd/Fk fVlad6G40lUTWYyhdt7Rvxsfr8NXk7ESwJSIoB+g2soS1vw96F5+AIVa6qTadhYoimqMUvbDv/i U2eD/xCwM61CCccq/uNGS1gNm89insTmSLFNxeyY7IYSY9n2wjDMwYppRh/C1X4b8Alzl5vWwXP Ix+BdnGTgn1birA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 The server-side sunrpc code currently calls pc_release before sending the reply. A later nfsd patch will change some pc_release callbacks to do extra work to clean the pagecache. There is no need to delay sending the reply for this, however. Change svc_process and svc_process_bc to call pc_release after sending the reply instead of before. Signed-off-by: Jeff Layton Reviewed-by: NeilBrown --- net/sunrpc/svc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index b1fab3a6954437cf751e4725fa52cfc83eddf2ab..103bb6ba8e140fdccd6cab124e7= 15caeb41bb445 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -1426,8 +1426,6 @@ svc_process_common(struct svc_rqst *rqstp) =20 /* Call the function that processes the request. */ rc =3D process.dispatch(rqstp); - if (procp->pc_release) - procp->pc_release(rqstp); xdr_finish_decode(xdr); =20 if (!rc) @@ -1526,6 +1524,14 @@ static void svc_drop(struct svc_rqst *rqstp) trace_svc_drop(rqstp); } =20 +static void svc_release_rqst(struct svc_rqst *rqstp) +{ + const struct svc_procedure *procp =3D rqstp->rq_procinfo; + + if (procp && procp->pc_release) + procp->pc_release(rqstp); +} + /** * svc_process - Execute one RPC transaction * @rqstp: RPC transaction context @@ -1533,7 +1539,7 @@ static void svc_drop(struct svc_rqst *rqstp) */ void svc_process(struct svc_rqst *rqstp) { - struct kvec *resv =3D &rqstp->rq_res.head[0]; + struct kvec *resv =3D &rqstp->rq_res.head[0]; __be32 *p; =20 #if IS_ENABLED(CONFIG_FAIL_SUNRPC) @@ -1565,9 +1571,12 @@ void svc_process(struct svc_rqst *rqstp) if (unlikely(*p !=3D rpc_call)) goto out_baddir; =20 - if (!svc_process_common(rqstp)) + if (!svc_process_common(rqstp)) { + svc_release_rqst(rqstp); goto out_drop; + } svc_send(rqstp); + svc_release_rqst(rqstp); return; =20 out_baddir: @@ -1635,6 +1644,7 @@ void svc_process_bc(struct rpc_rqst *req, struct svc_= rqst *rqstp) if (!proc_error) { /* Processing error: drop the request */ xprt_free_bc_request(req); + svc_release_rqst(rqstp); return; } /* Finally, send the reply synchronously */ @@ -1648,6 +1658,7 @@ void svc_process_bc(struct rpc_rqst *req, struct svc_= rqst *rqstp) timeout.to_maxval =3D timeout.to_initval; memcpy(&req->rq_snd_buf, &rqstp->rq_res, sizeof(req->rq_snd_buf)); task =3D rpc_run_bc_task(req, &timeout); + svc_release_rqst(rqstp); =20 if (IS_ERR(task)) return; --=20 2.50.0