From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (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 C1B574A13BD; Thu, 11 Jun 2026 17:50:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781200245; cv=none; b=M2Iqd++yMnjf6zSWB5dePZnMitWmx2HPkfI1iazyjPA3SjDzTqVrcpmDHvvEcaChJlpjyQEGPVRS5Ai2p6egmozJIKpmgLL5hFQ+iPk1juZ0YB2k88+K1s50FMJuCrF6OfzEoA+orpdY+XyICf4Lkj3Oh8N0j5qQduYTnMpKsjg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781200245; c=relaxed/simple; bh=e76Cj4t7vZ74CIrCBdGtHE4fA2leVDhN748tl1SGulo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ELCJiosJir5sD/5kzdMtVc9Lvybye3e3OUFzTeoWfZABkZ1n84S400n8Y+Kt0ohJHP8o3D78tW8c0VyYxfV1Sg7F4QPvJoaOyD/0qChSls5dDDyOP7LQzDZw8lLfSspVHKGxVjM4h0V7vGD92A0Ks3HEsIvuynQzIz4EJC3oSNY= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UQXOY62j; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="UQXOY62j" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C63811F00898; Thu, 11 Jun 2026 17:50:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781200243; bh=EThRh57fPLePzVxsH7+4kVjCWJt6EICg8XpCZoiOIfs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=UQXOY62jeZX6BSL8teLBljwzbS46AR0oBxtM6JyzQwjJFvafpHXzvscQZKaxqwLfE N5QY5s8K5XuyPdAxJMVrrRipFxzHW6dxCWcnlsYuLKuaF37Jh5wLbcQZ2j92dE78xc Yoxs5RZ1t8fweHeDoL89Ivih0zQR0LkmkLVJ3TYb1RdZkUtCPvlQqtfcQUCFdiVJyY 4z17JJUUorIK7ODvgBkRGFaLQRvb7S/SiC+5cWxvsfO/dkk6/JQnkQ38T7K55AbsFp 2O19er3p6inPxVDZL7cIf9J1j0r5m8j7TIByfX/lwZonneC0rD+6BFGkttir/kp9VP RQoEIwGJRKPRQ== From: Jeff Layton Date: Thu, 11 Jun 2026 13:50:12 -0400 Subject: [PATCH v6 06/20] nfsd: make nfsd4_callback_ops->prepare operation bool return 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: 7bit Message-Id: <20260611-dir-deleg-v6-6-4c45080e5f3f@kernel.org> References: <20260611-dir-deleg-v6-0-4c45080e5f3f@kernel.org> In-Reply-To: <20260611-dir-deleg-v6-0-4c45080e5f3f@kernel.org> To: NeilBrown , Olga Kornievskaia , Dai Ngo , Tom Talpey , Trond Myklebust , Anna Schumaker , Jonathan Corbet , Shuah Khan , Chuck Lever Cc: Steven Rostedt , Alexander Aring , Amir Goldstein , Jan Kara , Alexander Viro , Christian Brauner , Calum Mackay , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-nfs@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3301; i=jlayton@kernel.org; h=from:subject:message-id; bh=e76Cj4t7vZ74CIrCBdGtHE4fA2leVDhN748tl1SGulo=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBqKvVfl3yYpN26Lr0yrqUl4ufxN7NY4vM49XAbp /lNIUjbVTaJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCair1XwAKCRAADmhBGVaC FbG8D/9MkOI+lBcG+58c0zD5TjTtFMl4hrEQ2SsLPTWZ4RRG2c7iAumAn5f5GBBAH2GW2xfORI5 4QWoRX7BiNGD47s7Be7L0NGIE8NXjGbgQ8KotRvRmkSswCk+OCPKeCN3PXWxihnybhW81lVS8vE eif/KcnZTk0zmlE2GJakwik9zuvW6JIvmat7iw2yN6jZwoIyssNkefl1x+AASpmeTBeGJ6w6Bia xt0Ch69Huv4dGZ5EZ0Ula/a0QjPnFrU5n+05jSw5pqXHRpZ2GxBDFc5Ni0cpxzbgKFCgSa+5d1f gQ80fEJBnhgDGlNZFKcwskxMCHxwVOc65NkqjXTgde3SX6S4Q12pos3dC7y0RuC9/5Iun6kkqLK V7vsQkiZnwPSN9mRw73QMN9a1kUhVXoMEgluZwTpSyNngA0iYwbawl/oESzVIaZxGYVfMj2ZdGG e2dWpXYWURpMXyjlq+IAGaAi7gVxblMmQ0M9MA58VmyD/ZjMivpuDakAJv/Eap1dJoGfaLedo0C zmess2cTKtzL6nELQ3V3GkSM96HAemWZdBWG3NlpJx8p1HFKZJJilNAbbe5GPLIPOYsKpPv78gN hqkDqZY4ZEn20SjR7eQh6arX6rIh70dBP/d3pT8JwAzJAAUFNkLh0pngxCxzJgTBn3w44KhA9o8 MtYtCwtym65t5zg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 For a CB_NOTIFY operation, we need to stop processing the callback if an allocation fails. Change the ->prepare callback operation to return true if processing should continue, and false otherwise. Signed-off-by: Jeff Layton --- fs/nfsd/nfs4callback.c | 5 ++++- fs/nfsd/nfs4layouts.c | 3 ++- fs/nfsd/nfs4state.c | 6 ++++-- fs/nfsd/state.h | 6 +++--- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 1628bb9ef9dd..a3c46905fd47 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -1786,7 +1786,10 @@ nfsd4_run_cb_work(struct work_struct *work) if (!test_and_clear_bit(NFSD4_CALLBACK_REQUEUE, &cb->cb_flags)) { if (cb->cb_ops && cb->cb_ops->prepare) - cb->cb_ops->prepare(cb); + if (!cb->cb_ops->prepare(cb)) { + nfsd41_destroy_cb(cb); + return; + } } cb->cb_msg.rpc_cred = clp->cl_cb_cred; diff --git a/fs/nfsd/nfs4layouts.c b/fs/nfsd/nfs4layouts.c index 279ff1e9dffb..4c3f253c7d07 100644 --- a/fs/nfsd/nfs4layouts.c +++ b/fs/nfsd/nfs4layouts.c @@ -659,7 +659,7 @@ nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls, struct nfsd_file *file) } } -static void +static bool nfsd4_cb_layout_prepare(struct nfsd4_callback *cb) { struct nfs4_layout_stateid *ls = @@ -668,6 +668,7 @@ nfsd4_cb_layout_prepare(struct nfsd4_callback *cb) mutex_lock(&ls->ls_mutex); nfs4_inc_and_copy_stateid(&ls->ls_recall_sid, &ls->ls_stid); mutex_unlock(&ls->ls_mutex); + return true; } static int diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 0cbb37f73ee7..1ff954a18f93 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -357,12 +357,13 @@ remove_blocked_locks(struct nfs4_lockowner *lo) } } -static void +static bool nfsd4_cb_notify_lock_prepare(struct nfsd4_callback *cb) { struct nfsd4_blocked_lock *nbl = container_of(cb, struct nfsd4_blocked_lock, nbl_cb); locks_delete_block(&nbl->nbl_lock); + return true; } static int @@ -5599,7 +5600,7 @@ bool nfsd_wait_for_delegreturn(struct svc_rqst *rqstp, struct inode *inode) return timeo > 0; } -static void nfsd4_cb_recall_prepare(struct nfsd4_callback *cb) +static bool nfsd4_cb_recall_prepare(struct nfsd4_callback *cb) { struct nfs4_delegation *dp = cb_to_delegation(cb); struct nfsd_net *nn = net_generic(dp->dl_stid.sc_client->net, @@ -5620,6 +5621,7 @@ static void nfsd4_cb_recall_prepare(struct nfsd4_callback *cb) list_add_tail(&dp->dl_recall_lru, &nn->del_recall_lru); } spin_unlock(&nn->deleg_lock); + return true; } static int nfsd4_cb_recall_done(struct nfsd4_callback *cb, diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h index f44ea672670f..4c6765a4cf22 100644 --- a/fs/nfsd/state.h +++ b/fs/nfsd/state.h @@ -98,9 +98,9 @@ struct nfsd4_callback { }; struct nfsd4_callback_ops { - void (*prepare)(struct nfsd4_callback *); - int (*done)(struct nfsd4_callback *, struct rpc_task *); - void (*release)(struct nfsd4_callback *); + bool (*prepare)(struct nfsd4_callback *cb); + int (*done)(struct nfsd4_callback *cb, struct rpc_task *task); + void (*release)(struct nfsd4_callback *cb); uint32_t opcode; }; -- 2.54.0