From patchwork Sun Feb 9 12:31:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966885 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 C79A81D5CEE; Sun, 9 Feb 2025 12:31:34 +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=1739104294; cv=none; b=icpYApelq2EJzOMWJcfEeuMmdpC+ivUeSfFN+e7qoadFBRjvwLEwBw/41O6u1NxlpdnVgy+FSli4P+aFXeGVwVVk2sSBPYda4tlXJlzLVNmhvTm6e9DukuhcajW7AdnNd1uKBj6zUqDizxB275urhHx42JmdLRGZFnusU8AHrtY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104294; c=relaxed/simple; bh=ACNGifbeZ+ONtm0L1jnSjfGOWX8cYHgyykUgaWIEXow=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=D/kQ+zv56LTyvGDl+COk8JjjAghZb3O/rpQh+Krl/cVSF7mfF2ASEYWewABZqkyu2moj+XFIJ7fQ4bvKdmZIuaENxmXTwlFIQcu9xJqYRk0+u6w+6iCDLK9wwiRGiQ28qUDwAvf1ucYR7IoLNv8RlsUpYyrRq8spXr8pSJBfteI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p1DblK69; 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="p1DblK69" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 74C6CC4CEE2; Sun, 9 Feb 2025 12:31:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104294; bh=ACNGifbeZ+ONtm0L1jnSjfGOWX8cYHgyykUgaWIEXow=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=p1DblK69SwX5c+ZlY+dyqTTXsUIv3Q1zXDKy7Uc+baQ4HgmviLQZYom19NVGthuP/ s9PNt76vh04hMzHJmaL2oSOdHdog/hn6PlpdTb0Hg6QgOFunbrjh8sr750OU/7fvJ0 w5lgyTi0hmWtrVqH/5fp5HvUeogvZj/XKZbuao6KirC3Rmu++D+5R7o4InkmlVzm2x t9EtUV/7bjVs3vM54qrjr5GYi3XJd2LS4O8ueGh4FsLPF4yxXvFx+dfzzzr2TYUfz7 IXDShQ7gE7hQKE0ZUPK2dhADF+hXBNod7hVX9bTO6EdTvJXM3sM+ykCmRUmWJhrwqZ eThQX8q/IxAzw== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:22 -0500 Subject: [PATCH v6 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: <20250209-nfsd-6-14-v6-1-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAj4I0B+qPTlCBua2UigOyMta9SVHnf1LyBo RnY26kellGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igIwAKCRAADmhBGVaC FSnrD/4u8P5iLppXkkYoWH6KTzOrdDAq/2aa7yuudhzjSin9ZEpJdgS6LNcyNo8iUvUAqAKwF+q NTlPngMzX2V4CRXWsX8xjeBJR9xda370PEyujeMUA9ZO9ToqMqIRiG1MAmcdJKfWnLFd1kq3bh6 I+aZwQ0/Ip3+jV5dw66JQLQunw87XAA1CkDyTTtiJkWjz/WVSTxV1vi0kLzJL4c210iNu3Rwdbh ToT/puScOcjBLvFij1/ZHjUUH6RQL0FAy2ojiVu2brHe76+nzA3eeZACTP3L+uqcKPV7WTmOLJx XdaJG5KzSul1FFEa97Neixo+UaYH6iyL87Cp5ljEv6LmIoJWVSsSglzrHYmqJeMi8h101YMt2fT pQNBu6Ox4niKLqcvrBA4vckKy+qPrKCUeKC2sWskom7iw8iUQ/rUkDpVnX0l80eajbkHeysFFLt Av4VKrj64JDPQqsDxb8llNQEx6VzorpHTYu59V4vsxdXzPcCzi8weWurbRbHVxptsiOKurhgQTx DohfKQbhdzrJHc6H2EYlEDfR0aKc6msyGPpFoHfvd4uwpCJrUZCAf5gRtGrZ0eP2o+FJPCh9eOr qriU4vB/ACMLP2mHuOOImv/w2bcdo7YZPnkxkB7TUsFARa9Unjem9CxRaws+1b2RPWeAlGT3e4T tIKck5PLtbXl2Ig== 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 Sun Feb 9 12:31:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966886 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 B41261DDC3F; Sun, 9 Feb 2025 12:31:35 +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=1739104295; cv=none; b=U+I/wEnmcAw/jCuvdVXbsystpWN1Vd4PcPRbCaQGSPCZJE0rdRl7hfH8jy60B6Tf2z3hFcoiXQY35UX6zkq6zEkC98PaDFsNnMuPh2tbNqVsj2qDQQBRR4xiPESvCT0NIREJYmTKQ3WkwCsA4f47UZxb/DB8FCPqJbtJ346P4jc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104295; c=relaxed/simple; bh=ztGrtU9UoYB+Y9k8TfSDh9WfS45ofxCmIJlfkVPZp+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R89UesUhiiRquaOOguAQ7CF+DT5zV/wbBaLB/4+8p15COFtZ74godl8bKTPIr9ONqDvpYyxHoabayqJkA4TYfSv5rOqpHSxp5soKkVbcdp0n9HJK4GGbDHkHMqCYgHP0XQc1n0AihkDe12Oe4C5uQ9wpmZC1PlsXvgiRtO8Dhk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CD+y160q; 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="CD+y160q" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6E1E7C4CEEB; Sun, 9 Feb 2025 12:31:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104295; bh=ztGrtU9UoYB+Y9k8TfSDh9WfS45ofxCmIJlfkVPZp+s=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CD+y160qlDtP/YwPyV94G/nWVg+5bzMazqN9Jo3nPv8goRiTZR6cYc9T+MeTiHrdV QmhHdvC3JXbpmjIIswrTsEv5NcuUZU3FlzFCTEz878ARwDSbZ0Wzpmit+IMD0CfEbk fEX42lY6E2n8DBgrx3MmRyZimvWF/KcFqddaeJ37dE1k9ovPwq8+bLs+2XElDuP6AE NtsDEmdXJ9/9vofXIIwHgyOg/QdIPeWXUQjUnrkLgWJqDRmI8Rf+0/K+YdHI86lr11 iM8gCSyylzyOqrkKzbw5nBWYQjVf8I9Pt5w20Z5TxoaycjRZuKVH4NS2nGsnnqaqb4 J9i6SuzUzczIg== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:23 -0500 Subject: [PATCH v6 2/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: <20250209-nfsd-6-14-v6-2-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=3105; i=jlayton@kernel.org; h=from:subject:message-id; bh=ztGrtU9UoYB+Y9k8TfSDh9WfS45ofxCmIJlfkVPZp+s=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAjhNK/tk8wBKnxbBy5WR6/7g/dfrgecvWmV MpKqsbkSweJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igIwAKCRAADmhBGVaC FZLaEACKxyh24VRVvAI0Nx3sH3HY4t4QIjJ+h62XnhG6j0SMm9nwiDNrpVU3JtscJlkeXRs0S2y mQCwVuX22z1Ad85ZrK2i1eSQkrBZi6LqWHYBi17oJkArX29G12J9+BLCeilMaAe6mWdnWugVFbs oNvNsoGVvjhUKIs6IjQjXRNPuypfSxXYL2uO7DMIv4+1FdpVW2pV/jtz1pfh1zamoqBtmFbgdtI 96yAmnHlNCrlmZPRqqm4/jHw7357fH8npjT9zVvlpC+jrmV2hFMcR18/+l+txM8f2a6bIBmtIXG Do9LQxjEp8/1lkcoz1MIPFJ/6fT/9Kz6FXZ+w1ey3aQ5Ck488mQJf6/d/vp+QH4z1jhPAOVeDGM YOGfCMUARrdSMoLsG4t8hzs1LwaIH2RZnRBgejx1orhxkaXDM0rzDdMlpHww7omr3MuINRB5weg gt05APpo51ynkqYtACa4d10Apnm6DQH/tcR3comFpCb4lPXO5dgBLxa5eXphGZ509suRFQfJqqA ZDMMwRjocxkEmXYA52ZoyiIJG2+RGetk7YVyOXs0Y7H/D/JWfz+JDfEWZp0Blkh4m3Yo95hoZf7 Re3UN1719t/P1DrdYA7+XSRkaDVkdmHy50JMGPcUbP25bWbk/wmnMPsW1LhWxAjK426xEthyQEY cE0A53mwF/5Csbg== 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 | 51 ++++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 79abc981e6416a88d9a81497e03e12faa3ce6d0e..f983d2879bd3fe4c5aa2b0381f968fac753d79dc 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1328,28 +1328,22 @@ 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 nfsd4_requeue_cb(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; + 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; @@ -1411,11 +1405,7 @@ static bool nfsd4_cb_sequence_done(struct rpc_task *task, struct nfsd4_callback rpc_restart_call_prepare(task); goto out; requeue: - 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; - } + nfsd4_requeue_cb(task, cb); return false; } @@ -1426,8 +1416,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)) + nfsd4_requeue_cb(task, cb); + } else if (!nfsd4_cb_sequence_done(task, cb)) { return; + } if (cb->cb_status) { WARN_ONCE(task->tk_status, From patchwork Sun Feb 9 12:31:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966887 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 A29551DE880; Sun, 9 Feb 2025 12:31:36 +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=1739104296; cv=none; b=mLvwODxU2ylO5RqJLcK1ZOpJxiaOv9z/jLiR8o5HBw1h92WMrTvHvE6v3DrhA+vCAfmLXg6R2M2pt9f/Xt38+uQ3jxh4/8xlspMuNwXuGoe9/uRCfT7QvB/trOnpPwdScqJmsqFcJcbljEYXt1dSBhb6SBmFGf9XlTE1r6B10kY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104296; c=relaxed/simple; bh=om0AQQbo0fmc6z93AqUy2dNGBvmD49MIdAneT+a4+ZY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WDsRSpjNgd+8k0nNZed4ZMKgEU7gkVkwtnZOaD1Yr5KydHzOeyLA/U0LmfHHPUCDjcCqmrly2blX6lA7iPiTJo/iQV9F0lulDYOg7scTqz9Wj6QHn/ESIcY/ZL/7bYBN25+ffeycyxDgrOZmqRDckakvGYXacHVwfRPJWA5vwLc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=o7wzWN1D; 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="o7wzWN1D" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 67543C4CEE2; Sun, 9 Feb 2025 12:31:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104296; bh=om0AQQbo0fmc6z93AqUy2dNGBvmD49MIdAneT+a4+ZY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=o7wzWN1D9zRCbZZ5o0v0YrJ6q7aHjCgaX9OHWrECbkDsJ7/TgxulxKQzlW0x1D1WS +F/rMSLXjGqBIoxc2i+CKnU8ruV7ZjOvJ+Uejwt9rU/c+QbCc2bKALG3QcKn3SXu0q i9ZO+2a6hd9DViutxUjud0c8yLZSJUV5RhKdQrTyv0tavvK5GbNy07Hwy9Gynjig/t upRluTXJdV3LiJ45gbRMdTKnHxxDHnfraTxsWiwfS7N7M0M11XgNbYIDiFagpgu94O mut8cqfPIlkM7mxlRGxrEi7Y/U+g5GLB/T5q3so1bHXiIa2BUIH8ybaxcDDyxHbKRW 7X+puYAfXn4WA== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:24 -0500 Subject: [PATCH v6 3/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: <20250209-nfsd-6-14-v6-3-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=784; i=jlayton@kernel.org; h=from:subject:message-id; bh=om0AQQbo0fmc6z93AqUy2dNGBvmD49MIdAneT+a4+ZY=; b=kA0DAAgBAA5oQRlWghUByyZiAGeooCOgbx46o8uwYGz3bNxPIAL0+BCvWnIF1TMXC19eaGdLT YkCMwQAAQgAHRYhBEvA17JEcbKhhOr10wAOaEEZVoIVBQJnqKAjAAoJEAAOaEEZVoIVDkIP/2Gh oeQ9bcbSj6D06Y8of5vWIMFQPT3VBkXIM2xt1ZtSOIJiRaqExiR/ba97P6zgrePkWzUjWBP4eKM yUxDVq/y0kknXYTq/jFaGdGAKNdeO3iHMqeyI7l28Tgvd02K15e3B/RrUClUApa6LXgHPoKWUh2 Boop4xn+1Bi7IHDocS5P3XfsBYiG3VGa/N/mkd7+f5hP8pstFw1XI0JLlSk9G6DdEwa0ykWJMS/ 2pMFgWWX+EbV/nLLwjhUOth20aX9DSbZa3FntavbNZNnlYp2NKJCBqEUXUU8O3uZRhZzDrQQaCi NPfu1i8xAbcLFrjA0Gza6feCtgkSy/xqnSfjGfXauPyXGTpRxc7dAUBRJ0RG4nVekt92/0NMTj3 8+Cfaauicbb/mhJIQOEYb34DxNnPEeLLKOxxFpIOH6+NHGbQtxXj4n47rnO6GMzro2Y2Z7/GKtK A7vo3E3rog+GRYPQfNoiM3O3NVwjx2LVRJSzBMVpFD1OimKL2eg1pXP5yy8TljsRCMOF1x8/b8J j5K20UwDYV4QbXIgPhyBEyzoDGYuZjh+6nvIBUSvdysajT/WGj6bR6fb3xVpwhFH7K7xYOAhD2R NkAdJjqHARwkadmRLNPtAKApTkpHUnrNKo2or/2s6js8hfoee5q3X/HS7zw5QwaY3hQO6iF77Un SQnpK 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 f983d2879bd3fe4c5aa2b0381f968fac753d79dc..7596d0f7dcad44f462ca483979b9c9138ab5dbaf 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1405,6 +1405,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); nfsd4_requeue_cb(task, cb); return false; } From patchwork Sun Feb 9 12:31:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966888 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 A3AF8243378; Sun, 9 Feb 2025 12:31: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=1739104297; cv=none; b=oPN/mhR2YXdjZf8Agoq+8ePNl+XrEhkQRvHM0mGMISzGwN5lnhWbXI+sKPDUxFe7TuP7ZWq9XLolpBvLBn4bkrmDLhzepYa6gez0P8gNFZpMKJikk0dq1x7MXxJPzDoueb8yc3cP1iysp8fn47BOAIBP6+OjVjcWBUrkr87ob80= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104297; c=relaxed/simple; bh=6qs4KEh6BP5gYfAONsh/Ruc8BEtsMmRYjEFJ2fGMAOs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=npvUrjujLL4ieJ7jzDzKwVubohBK+jkj5eP2IPzckfUIWr8keniNJsGQpfgGVyAWxHXhOpiHpkaOHEz3k47/9Q1rY1x38YPSMdEAw0OR5quODtesNMo7qM5adHy+r256i7NCZ4cj+qzZOlppg9IPjVC8zi8/TxSUwc/4gYONH64= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=BqiHea+j; 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="BqiHea+j" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 61D9DC4CEE9; Sun, 9 Feb 2025 12:31:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104297; bh=6qs4KEh6BP5gYfAONsh/Ruc8BEtsMmRYjEFJ2fGMAOs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=BqiHea+jgEnke+y9fgdQIdD6rbAYEpw71ZnSC6Sx0Oqw/Jx+tb9oudxeUNxNSnHWb rKWtAekzs4lNpIfgxwQrsfjMadqrQf6tKIAbcdaYhrYfD1DkDPRPhA2vLoOtUTaFly TSO6INjEyVUb6KR7Sq4DLbLOLoi+qrFgMX2ysm7tdJEN414lgvr5gKJR0dAfTsbQdm uiFQeka7CmDroZY6I1xklHJ/cKhO+B0irhrga26MfdpZFofPVK0n4UtBriMoqYrMjg XFVdGLuszuxO38kuj6NUPi905od0itNvUKhkPEH+56RaU1ggUcPUyIym2gwq9pk8R3 6nbJj63zZi9Ig== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:25 -0500 Subject: [PATCH v6 4/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: <20250209-nfsd-6-14-v6-4-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=1899; i=jlayton@kernel.org; h=from:subject:message-id; bh=6qs4KEh6BP5gYfAONsh/Ruc8BEtsMmRYjEFJ2fGMAOs=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAj33NOGGmOHz9LxEEcJ0Scy/MVzlAJqUJNp kIcu49dfRKJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igIwAKCRAADmhBGVaC Fd83EACFizt1o5oaU2/rw4euXsAswdIH+NgTmiFAO/v0mwqAVtfLG3rgf/p1bGyYoaRfio+cgb8 5HcH03sriljR22+IPamd+qXWO8lSrFHOvcyHIWOLmaIIq87iEGLkchKMhKFjunNCV2sNtMrIgyl T8I3TqKJp4hPiiMxMieAEKqKX73fljyVUDHbc9JQM4oWwsjIs8EYjFSje+tMd51MRUWLC/UpKl8 fhyUa1Ci3AFIoyVoNUvZXBMSLe7U4YuzACJ/QaUnm78o5ile5F+OXhbg9ISEyeikxaLTgDsbnBQ HmSkIB8x0K3bNDl3CejiJKvY4HNyWmKBZa5OM4rDcdfEm/qBk7mBRFHB3h2Ds9yuynHq8h1NyZr VTnIT8ZjFnNJ30G85MV384FPVTddY5RA+5yUIH9Q1W9w8O3gEq9Ua+bD7P4SWW0USlBsGzbKSsP uuaK6t/8RyjKJjBLkObtR1PDtiGWV0RrfvyflruyOEcKe6BsliCJaQ0Z9iywSBvR7WWVm3gLN59 br3KVCy600KLY6wPScYWWFOQ78KrUCtlQI8bxWZ4LnHW/kNyhZfnwCwuuVzv8DeuCPSKr4twhLd goUfHNCzgexwI1tQv2+7xwN3A+b2Z0q3TxGehi7Xnk0aC7fOULiUU5X+iXXFWO45S9GvO+Qp3wo OH01ORtaNCv0xZg== 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. Check it only before restarting the rpc_task. If it returns true, then requeue the callback instead of restarting the task. 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 7596d0f7dcad44f462ca483979b9c9138ab5dbaf..8cfd6ffa6e18c4db5924d35f7b3344dbf350700e 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1379,8 +1379,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: @@ -1396,14 +1396,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); nfsd4_requeue_cb(task, cb); From patchwork Sun Feb 9 12:31:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966889 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 98A1E1DF25E; Sun, 9 Feb 2025 12:31:38 +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=1739104298; cv=none; b=lCnN+OtIAu/iYwA+UL7zCRy2CUn6Pldn3QQDUBN/vUd15jg88+Ibrl9DOdvQ6ws0M0XhAEI5ReUccVmji9gYLLHUZM2sb0kt8K5Ip9dxirMniuYzO6UYKVjVMwciEMPq1/9jVTHtaKyNtKWlI/dlg8fCFRY6P7qW7dqJdBAdeao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104298; c=relaxed/simple; bh=dxNkzQ9dvAsv5b3oqVUkUt8bu9X5wXULwoC41VXqXLU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XDpsU++lf00D/srK4xcfD7oRcq3k5Qfaa9ip0wwgU2id4vXXZj6OEEDIfvlDLbFtXFiLeN+UAu2n4pZjFMef4gFIDy5bJ1UH89qSsocKXm+KSTSMR+7WL11WQJbT6Hp1ATv4oCHwEuPLSsNW1vCLdaStMz8top8yXCKJV/0HMjo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QVZAjpjP; 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="QVZAjpjP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5C716C4CEF1; Sun, 9 Feb 2025 12:31:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104298; bh=dxNkzQ9dvAsv5b3oqVUkUt8bu9X5wXULwoC41VXqXLU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QVZAjpjP22esVF/NA9E56dThKIRqH1QRcosL8My0Fkawj9Ge+uWi24bl+JhyXJQuw /gTlUUcmn91N5shFMf8HHbFFUvyhfh3fMVj6IdOMjKVo8yF7IC63HORsU11byN4u+w SJc8XpIkVKX/l6ZJS/pnnKvI7QxS5mc1qCiemX/ubkQjwpdbxLwcfBq7tutvJjSuJZ W9deVflwYFCILTaIv43QTiGC2n5GIOssTTeRU1RpcBoZ5DmYxgTxYLtKWVTgW/2mqb 2NyMXwZ6ZwpVin/3iigdcv/cp5fw7ZKiHejulxzPZqF8If2NH7YfxMdKSXDAZasyOP +TNcsN1rn9SBA== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:26 -0500 Subject: [PATCH v6 5/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: <20250209-nfsd-6-14-v6-5-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=1030; i=jlayton@kernel.org; h=from:subject:message-id; bh=dxNkzQ9dvAsv5b3oqVUkUt8bu9X5wXULwoC41VXqXLU=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAjdxMj5+gyUhPTPibLgaDhdaLbGL5L7Pabz WLmTGxum4eJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igIwAKCRAADmhBGVaC FfrsD/0cRAtp81cpZzRbkzVPI69JPAGZLDQFQzf++6+9deQA55w7n3dIId3q/yBLQWnJrNVanqs FNsGFfQPlBQrKolFyahNaEnxH4XnFctTGRcVT1T60iIgqOcDFgPkIs/VQMx4e3tO3IyyuaCn/c+ IJMbGzYsb+EHylq1+cnyAclcZbfFSXmzhd+JGipJKy1mySXhITnffsoVLooPZHuDKMMLe8PBYYr P4rfmBrtCE+QY2RgT2SLv/zXb6HsAGcFoW18+uE6rYDLO+Yg/Vvt6qsyojIs/FodnWZ2U9A6a6s tRE9/MoSqNQy9OysLeDf3JFvW5xY2Ws9fkf4mJ/veYXJhlmtpYFXy2fGZh4P9EUv7eujLX9wTxR /8cteEMzBHAYB6Lstl5kV6Swe/gyfdl9iqmnlNJRSzOr8z4DWmS0hbwFbaFeGTlCxU5E6Epp41s 5X4erKv0yder6YWMsvJmwnohKZUorTUgKeiRycmYqQrOlEn92wmbvmKmasfBkpEJ8wioMb5MCfj M3XGK8mP2qi0oPx6hkGdjF06C9t/XTKQwExrJrUW3tGko+1uJrSMfiBCNlN6TzBIN4C0xo9dbKq twvN5el+xYCXckoO1O99ou3RpOJ4fuAmCl0bDL/S4/WQbEsQrLiju05byTb7Dc7tgJNRVaAqN/N dyU326Xgw6PBX9Q== 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 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 8cfd6ffa6e18c4db5924d35f7b3344dbf350700e..18803ebe2bddd433308cabd6f99b64ec887069a7 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1363,7 +1363,12 @@ 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 the session, slot index, or slot + * sequence number in the response do not match the same + * in the server's call. The sequence information is thus + * untrustworthy. + */ nfsd4_mark_cb_fault(cb->cb_clp); break; case 1: From patchwork Sun Feb 9 12:31:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966890 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 959021DF980; Sun, 9 Feb 2025 12:31:39 +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=1739104299; cv=none; b=W8wpcqquhYRxurfFC7KidoSO5+2lt1wPNu7yvE/KEvW7GpL8qbZuMZ7HLjIIdGhxkUMvLklY/q3Dvl1nBfVZRvxg80pPBDxIRrIKd7+1mtSkfuH1GLSIlmAMHr19FwNGLBQmrBOkFFHTEN18amPg9JDv3tZT5oz15vDQUgyHgas= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104299; c=relaxed/simple; bh=uEceOfOTweUpIYrM6qPyO2S8wS1ZMcH1/Lwhefs0PG0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ctCTC/NmJvD/H/Yi5vpMezmDmkTmGmn1qKU5ARLqMjucw1sWOwPf98y6BmBK/ZEPuhYbOJNECY2JNi78OLerKsd3c48QNOWmounRz+GxJo+pYvKkWKv83w/iKbuTIACr0vNQfiRXprgF64d/pTS2EeogZSDZBHS+UYyo2gRtA0s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TLOlaLkS; 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="TLOlaLkS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59F0DC4CEEF; Sun, 9 Feb 2025 12:31:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104299; bh=uEceOfOTweUpIYrM6qPyO2S8wS1ZMcH1/Lwhefs0PG0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TLOlaLkSS8CveN9QLj1u6bV5uhv0Uj4hnSj7/D6fYsITNFIt61dObYebROFEqRAgv v5QsEd7vSQFxxjHqFU+scK8qHZgGN6QlRJkZ6NOOheeHdGPcZZ/8fztuicb7H8L5+L 9y4m2tsXvLdK3xZLYcBLtlWVjZl10lZ4ykZqfcmoeWMeFQP1tJAw8jcdqn3PJOFGej mNoeP1teL+CefIdW5UCjYcyUWtBvMVXfVz/48q2AUIiG9R/WA4GTYti334btKQHhRY qiQyuob9HctWeJCE193JftApQATE1/In7xJbSufV8uTt+qCSQT5Cy6CZu5QFM8uv43 zmtINoYMEXBEA== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:27 -0500 Subject: [PATCH v6 6/7] nfsd: handle NFS4ERR_BADSLOT on CB_SEQUENCE better Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250209-nfsd-6-14-v6-6-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=995; i=jlayton@kernel.org; h=from:subject:message-id; bh=uEceOfOTweUpIYrM6qPyO2S8wS1ZMcH1/Lwhefs0PG0=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAkMfnHqCJZlEW5Ykiq8h54lDvdowN8p6Mmt +9oeIn5sFOJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igJAAKCRAADmhBGVaC FbB+D/0ex2NjVBfoMQcdH5pLVT60pUYRzjPQ5K7iH+xFcmql076jqY6DDyR0BAnjflQ8OeCwCeW GUxpmhpGix81hGKvZagVSUYPhCn1pmnNzjJpmfsPcEEof13VZXtOBKiNaOSyjHVyEFPer97zbE9 GY+0rQJNZdzGt5BNxG8V8xjKrk0sBJ9kc6jZOhmUnf5yTWyuRMz4uGyqrp5u9YdGX3ujExHB6kJ aoMyqBM9/yXHa8mNEJH2GXtJpgtrIZCzOQ+rhE8r/R0P/z0SIkBC/0YYE4B6WkO2uWFean9IGkk GIiT8hQaYUxqKHHc93kEkl8wn6saW5JUVwim4sLszYvnYpFl62OrkC3DQGbsdE0RczAHaeIMCDs yngW1pYeJiba9+XxZ8cDbbsd9I9zeSJModroQPbNvr9aOvKS8iGxRXk5U65IXpKMinn972RIVf2 sNMRTzF8L8Hu+rfK4m8NHdxBjouuBPl/nchk7sc10e3nhj6SUvgk7fS51GmrWveFpjtx1gmEkMx U5zKg8y90guCFfcoNJoSllsoNB8aTCnGpXScBatnb5z8XrzTDzVaGoN2Uc6GRgCEGEUitGExIEQ AcczO7Q6gPCXv5YFw7iRZN0dmsFrrbYu3/G66062nNLky49qsZf/YhAla0fcan/hpI2A71Ry3so DjC0Dc4aXZxiEgg== 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 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 18803ebe2bddd433308cabd6f99b64ec887069a7..8ba1a2831e8601ac3af9c5f147d3dcddcc1bec77 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1389,6 +1389,13 @@ 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 + * as to the backchannel parameters. Mark the backchannel faulty + * and restart the RPC, 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 Sun Feb 9 12:31:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 13966891 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 312191DFD94; Sun, 9 Feb 2025 12:31:40 +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=1739104300; cv=none; b=uuDdv53KwAqREmN4IToQfY5I8bqfDz3HeZ5ps4ICABZwyeBrUQatrA87qzmQqrFU75CYynbByC8r1KBtMnMOhxaWMN1sg3Id1RdJUIerdxuEDUFQFoxRs5pQJHChRmcXHxOcjhZFTG6lCP62UeQ3nTljnXAc/VN7CjA156Zq8rk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739104300; c=relaxed/simple; bh=VLx4Uh4kR6QXzO5q5nJQUcywtXXEOUq/AbwIxjkBtsI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aeKfvIUU3vtowdm7fSMlWpPlNKNjiZv6icvYhRl60QlXwVjlOWdIKSCXbrFxb0fdubzXOl4Y+JAWoH6it4YhHdODpysnh/AYNY7R2vU6FvF2eB6RucbdQWq4nojewYQKLZ8L71dDmHDK7VhyFqLeS9ITzhhNmXRzHrmyOiQXQJc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ViYKZzih; 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="ViYKZzih" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 55070C4CEEA; Sun, 9 Feb 2025 12:31:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739104300; bh=VLx4Uh4kR6QXzO5q5nJQUcywtXXEOUq/AbwIxjkBtsI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ViYKZzihqW48BiMv++Zz6D4YZo/8MkZb0GalgDgBR+a4jAOXx0dtD5vMzp5PV4e8l YXmuJ3QqAyUv+4zzVI8hP3H446A60AEgpGsGh/De+LTD2p6eFBSL08oF1U5w+q58Fz Nx8uhyZN7BAnFlSQGVWFYq52R0opKx3Ct6AcxRiA9nHpj/QPQ/lSE4SD7W0Yducze9 GNme7TiUsiE65buil+knEiHtIdWM+jX/j9rn35eMEm+im7Gh5/godZH4rSZ2W5L50m OvNsfhZl0s7tDEtweUxdGWI0wPg2AV6ddobVrpB2K471szCvWhY94Ysis+ivVAYASU dIdLPliwQWlZg== From: Jeff Layton Date: Sun, 09 Feb 2025 07:31:28 -0500 Subject: [PATCH v6 7/7] nfsd: eliminate special handling of NFS4ERR_SEQ_MISORDERED Precedence: bulk X-Mailing-List: linux-nfs@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250209-nfsd-6-14-v6-7-396dd1bed647@kernel.org> References: <20250209-nfsd-6-14-v6-0-396dd1bed647@kernel.org> In-Reply-To: <20250209-nfsd-6-14-v6-0-396dd1bed647@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=1842; i=jlayton@kernel.org; h=from:subject:message-id; bh=VLx4Uh4kR6QXzO5q5nJQUcywtXXEOUq/AbwIxjkBtsI=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBnqKAkp+y+zE3S1pj0cMhOfClcZsuke2Qg+YEZl iSsOl7bF7CJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCZ6igJAAKCRAADmhBGVaC FTndD/9o7zxRnEVQdfak2A0/8TCVCrU+mXlAA7s4sQeC6B9QM40Da7+2MvhcUhD/JDHHQaJi/0R baEY+MXCBnIOqRmzlMfBut6TPKgjh0+hKRZkXZkUquimtC83D/Ak6ToUu/q9iQKGZepYU5s7kQB 4d33EICT8EcX3cDW5YPfGSlHHx1etw6UvMgGlHHBbKWfRgeLJbnFBo9/SudJCtkTCy5KPQ9LlY3 oK8HCuBIDRciFB3crrgkDoQRFySjhZDdfJWDOK5gb7BjQRGnTx7TjiLICsfQlQA7TNhcg5P7LI6 FAkSMIl/zsEv5VENEtg/grykMrdUiehrtjopbtnIqBPx5+3+HLrsNOG4PhEiT5x1D6OphbLCvyO T1RN96X8b3swBbfDcxRkpihGcgJXI29De7RIBVfln3h7ri3mt5ZDesD59jex4rdJ9nnpYuCPP+C ulHjgaommWyEpYJSFVAm7ZpUiZNA8anU8wX2vTT6IvT/j7Y3540R6ck03zCWnvipsrvosWs0aUI qnXoMTwEjR+eQtYB2v+T4N60fdtfpd4uw+O1l4ZLV93soKWpY2+3txtb8rsdDDEObHUf2KwHpZg FxgVfonX7AYaflISCEMzM+h8pH542FmzRDAgHda2xxDB/+L8VBpuozHUuYn4aIj4BtJJAOk8hi9 f/DvxxVKVYTXLRQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 On a SEQ_MISORDERED error, the current code will reattempt the call, but set the slot sequence ID to 1. I can find no mention of this remedy in the spec, and it seems potentially dangerous. It's possible that the last call was sent with seqid 1, and doing this will cause a retransmission of the reply. Drop this special handling, and always treat SEQ_MISORDERED like BADSLOT. Retry the call, but leak the slot so that it is no longer used. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 8ba1a2831e8601ac3af9c5f147d3dcddcc1bec77..2c7ce787eea5a7200022511fe03e269cee43bf7c 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1388,21 +1388,17 @@ 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: case -NFS4ERR_BADSLOT: /* - * BADSLOT means that the client and server are out of sync - * as to the backchannel parameters. Mark the backchannel faulty - * and restart the RPC, but leak the slot so no one uses it. + * A SEQ_MISORDERED or BADSLOT error means that the client and + * server are out of sync as to the backchannel parameters. Mark + * the backchannel faulty and restart the RPC, but leak the slot + * so that it's no longer used. */ 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); }