From nobody Fri Feb 28 21:23:09 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Z4Lly3BFTz5p8Zf; Fri, 28 Feb 2025 21:23:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z4Lly0M80z3nDl; Fri, 28 Feb 2025 21:23:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740777790; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=B3kMmgIAPLwIEzVYUhJqy5P0KvQfZF9JUByVs7P7vTI=; b=IFG8drxoDiZ/k5qnMkGICOtmx9sLWS+yP47Vwn9e9Ico/9pkWE+qqxxqGd/igibGRWAcf9 OKYj3ra1Tl4JTleGCV3W/s6RFZZ+yzJwcMW3T9x4701T3yZbXpF4OVX7uBK5aNMmZchneO B1iF/GiYgMZvasOi5ERZyaAZ75RZR9gmzjM6bmIaDQrxgrWVkbnecEwmTb6jzAYqglR5ni C4bdefMiO+bzwapriqrV7vHIZmXGD9oxqGME8UA8FSkP3nPA08T5Z8wW6fPNqfw48kGNXt to55oWN1929hujXZgUmIDgs3I3DjhlpVOREEIavUEyZPEJ9T/aT0VMJG3J7zZQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740777790; a=rsa-sha256; cv=none; b=jyx8v0lF2OdbLwDebRDl78S4zdOs0WqgNwYVKKPxdCgOvMrJ5RsBbMHRcO1XjY49ccyJcW xl2g1DrpOTMOOsU/LP8eg4bVWRpJxfQjHpE89exdp6mJJS89CPPqc1VY+gOXJC/xMJ8t+u gKyjwT0SvoJ2NnRMlim1fLuOJRQqGlmog8ebUQzC08sRnE3nui1Q3RJ8WWc065NTyKn9jD u+IEOVPVJjtYOSPY5MRcMfXfXJOAgLPpT2qAZ9jOeJLaeDyVN4fBStAgjw5ps1Xr1ARpzm JkmHaCHcRagWqt8H5Ao06vfziRL2HEKNEvhvWn9jenu2hbDq0dKGmQFTDAl78g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740777790; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=B3kMmgIAPLwIEzVYUhJqy5P0KvQfZF9JUByVs7P7vTI=; b=TstJ1xIK52tVNG4zK7aQyXzENnZTdeeqY7EiKDz52acGn/DW1DkOQspuWrjCZ/5C8TNuAt JSXQT2hGohMaMGI223dUp7pMAzBBaJR8ozIW9e1ByhYMB6wnuIMeSn5MlL6Bi+W5j3O5Wk fVmvjLauyUbvuMqjsXxD73OLDUdel1VXuOO1bIsm13LtjV6HHC4K+CMsA46OrzUabXLs7F lCvgS+pwdc7In/Iqeu0omcweNq+G3ygGNrqqjoZKXJdO79VsEH8EMKkCEPTmYDULGblkqi zMt+UVPXXt57wzRLY9JXEdKrO2aa1l4IQoGIn02SXxoHTLw0DXrCo0n4gjFvBw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z4Llx74VFzmQV; Fri, 28 Feb 2025 21:23:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51SLN966016669; Fri, 28 Feb 2025 21:23:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51SLN9M9016666; Fri, 28 Feb 2025 21:23:09 GMT (envelope-from git) Date: Fri, 28 Feb 2025 21:23:09 GMT Message-Id: <202502282123.51SLN9M9016666@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Rick Macklem Subject: git: 9fed5151903f - stable/14 - nfscl: Add support for CB_RECALL_SLOT List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: rmacklem X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 9fed5151903fa609bf06f2b526a105fc21793651 Auto-Submitted: auto-generated The branch stable/14 has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=9fed5151903fa609bf06f2b526a105fc21793651 commit 9fed5151903fa609bf06f2b526a105fc21793651 Author: Rick Macklem AuthorDate: 2025-02-14 20:56:52 +0000 Commit: Rick Macklem CommitDate: 2025-02-28 21:22:03 +0000 nfscl: Add support for CB_RECALL_SLOT The callback CB_RECALL_SLOT is required for NFSv4.1/4.2. Fortunately, there does not appear to be any extant NFSv4.1/4.2 servers that use it. Since commit b97a478896e9 fixed handling of session slot shrinking, this patch adds support for CB_RECALL_SLOT, which shrinks the number of session slots as well. (cherry picked from commit 4517fbfd4251180147082f94253c4347fa44f570) --- sys/fs/nfs/nfs_commonkrpc.c | 4 ++-- sys/fs/nfs/nfs_var.h | 1 + sys/fs/nfsclient/nfs_clstate.c | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/sys/fs/nfs/nfs_commonkrpc.c b/sys/fs/nfs/nfs_commonkrpc.c index e35172ee2b34..0ae3b94bef89 100644 --- a/sys/fs/nfs/nfs_commonkrpc.c +++ b/sys/fs/nfs/nfs_commonkrpc.c @@ -123,7 +123,6 @@ SYSCTL_INT(_vfs_nfs, OID_AUTO, skip_wcc_data_onerr, CTLFLAG_RW, &nfs_skip_wcc_da SYSCTL_INT(_vfs_nfs, OID_AUTO, dsretries, CTLFLAG_RW, &nfs_dsretries, 0, "Number of retries for a DS RPC before failure"); -static void nfs_resetslots(struct nfsclsession *); static void nfs_down(struct nfsmount *, struct thread *, const char *, int, int); static void nfs_up(struct nfsmount *, struct thread *, const char *, @@ -1474,12 +1473,13 @@ nfsmout: /* * Reset slots above nfsess_foreslots that are not busy. */ -static void +void nfs_resetslots(struct nfsclsession *sep) { int i; uint64_t bitval; + mtx_assert(&sep->nfsess_mtx, MA_OWNED); bitval = (1 << sep->nfsess_foreslots); for (i = sep->nfsess_foreslots; i < NFSV4_SLOTS; i++) { if ((sep->nfsess_slots & bitval) == 0 && diff --git a/sys/fs/nfs/nfs_var.h b/sys/fs/nfs/nfs_var.h index c726d956fee2..8b8b3f5ce961 100644 --- a/sys/fs/nfs/nfs_var.h +++ b/sys/fs/nfs/nfs_var.h @@ -780,6 +780,7 @@ int newnfs_request(struct nfsrv_descript *, struct nfsmount *, struct nfsclient *, struct nfssockreq *, vnode_t, NFSPROC_T *, struct ucred *, u_int32_t, u_int32_t, u_char *, int, u_int64_t *, struct nfsclsession *); +void nfs_resetslots(struct nfsclsession *); int newnfs_connect(struct nfsmount *, struct nfssockreq *, struct ucred *, NFSPROC_T *, int, bool, struct __rpc_client **); void newnfs_disconnect(struct nfsmount *, struct nfssockreq *); diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c index a666792c17f9..e803c2cfb973 100644 --- a/sys/fs/nfsclient/nfs_clstate.c +++ b/sys/fs/nfsclient/nfs_clstate.c @@ -3938,6 +3938,24 @@ nfscl_docb(struct nfsrv_descript *nd, NFSPROC_T *p) *tl = txdr_unsigned(NFSV4_CBSLOTS - 1); } break; + case NFSV4OP_CBRECALLSLOT: + NFSM_DISSECT(tl, uint32_t *, NFSX_UNSIGNED); + highslot = fxdr_unsigned(uint32_t, *tl); + NFSLOCKCLSTATE(); + clp = nfscl_getclntsess(sessionid); + if (clp == NULL) + error = NFSERR_SERVERFAULT; + if (error == 0) { + tsep = nfsmnt_mdssession(clp->nfsc_nmp); + mtx_lock(&tsep->nfsess_mtx); + if ((highslot + 1) < tsep->nfsess_foreslots) { + tsep->nfsess_foreslots = (highslot + 1); + nfs_resetslots(tsep); + } + mtx_unlock(&tsep->nfsess_mtx); + } + NFSUNLOCKCLSTATE(); + break; default: if (i == 0 && minorvers != NFSV4_MINORVERSION) error = NFSERR_OPNOTINSESS;