From nobody Mon Sep 14 00:14:38 2026 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 4hjlyX35B8z6rHRL for ; Mon, 14 Sep 2026 00:14:44 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hjlyW66d6z4m74 for ; Mon, 14 Sep 2026 00:14:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789344883; 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=s4abNI+ZpvnzcSo2ry1wyvf1wM8rp3KPwPncx6YaCGg=; b=Cx4/0s3op3lGocq09c655OLmeP6ASQC6LqgzrbQ6wZabuohzf5kTV2OI0jY4E08hFJOoLB 8zH0rlV7QjObTRK22mH3NMHWk0aiPJQRyMkjM0qf0vdxGy+Uu3TX91J2nc6dFb7sRVK5qe BBkcgP7LMlthEqk+L7xR3sb0b5HryjuaNq07ukdROyn1r8gPbMGYBEdfHi4wquKRV6wzzI WaWVwtDCXMmNsxRuFtWjN4GsO3PL68ZmPVSAAa+BMOjtj+ZjqpDXuOgVj1/SZaZav29WbN Z+jbjSjnchNpr6zuY7yHTo7hOGGv+SvOrQo1/KQvWNb0PUO84rEaR4HB8Cz6fw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789344883; b=jAEt0co0MXaNHEgzBdedB7/KBWm0vU711xkgwv+s0COGs8K9hAaFGzBHzzAdMjVxJe2chx 5J19DiyleBebLArEfMIgtnil2UPDbnGNyo5FERNNwqBRK0p8ZtTbuYuvejyAB5tsKXY0JJ viREwngi4WkhjHeJqgeAIZC0k4S1cwfaPS3oronJdrYItEkqujwO3xtdrcgnB182ka6f0M g+AKC7z7E4bzYUG5SNqXXF5ssvNSRbPN0E34yAoNe/iQkYMc8Bc8c4tQNIMm3+/mSShdSm bme5GJO0Ykm5OQZ0lbTrqx7I0NR6F+TmvT7P5Ls0tt5VGbvfHW5TVebFFURIqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789344883; 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=s4abNI+ZpvnzcSo2ry1wyvf1wM8rp3KPwPncx6YaCGg=; b=o+C2eGbeuebCzCBM4auYZtvfatZPeuk5kUD3eBl4VsjIK+TZzHoL73iH6qbqwLIv09mgtA Dy5PrvROlGTtBEWV+iOeJm6ouWpdfyTZeLJVFAJnlLjOF8OxS8KxN+FmDSuqDFaG1I5u9Y olt3H5NbxPCLuXxMg7uEcaOBAUQ8EcvNrmKLK9wS27lCWlljM+/aMIbezCnmhwV6kLFsTS eU1803kTKFc0wx8mFHHN+jpxW7Q4tAypU3JdQa9x6jI0W/p2p1VDKhN/HR1nlpF1braHi9 IYY3bpwSOJFwTUxzSNyeUPTcOFG0xhztjGihH9obsp2zx8EUwRbwtWJgvHfQiA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hjlyW4vYPz15Lg for ; Mon, 14 Sep 2026 00:14:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 47463 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 14 Sep 2026 00:14:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Rick Macklem Subject: git: 77535f91f623 - main - nfscl: Yet more fixes for the NFS over RDMA client glue 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 List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 77535f91f623ec5bda9d45de878165cb6b3cdba1 Auto-Submitted: auto-generated Date: Mon, 14 Sep 2026 00:14:38 +0000 Message-Id: <6aa73c6e.47463.61e2e30f@gitrepo.freebsd.org> The branch main has been updated by rmacklem: URL: https://cgit.FreeBSD.org/src/commit/?id=77535f91f623ec5bda9d45de878165cb6b3cdba1 commit 77535f91f623ec5bda9d45de878165cb6b3cdba1 Author: Rick Macklem AuthorDate: 2026-09-14 00:12:46 +0000 Commit: Rick Macklem CommitDate: 2026-09-14 00:12:46 +0000 nfscl: Yet more fixes for the NFS over RDMA client glue Yet again. I was trying to make the svc_vc_backchannel() operations do double duty and be used by the clnt_rdma.c code as well. It got too messy, so this reverts svc_vc.c back to its pre-glue form and adds the small changes needed to support a separate set of svc_rdma_backchannel_xxx() functions. This commit should not affect non-RDMA behaviour. MFC after: 3 months Fixes: 884ee8d6c9b4 ("nfscl: Add some glue for client side NFS over RDMA") --- sys/fs/nfs/nfs_commonkrpc.c | 19 ++++++++++++------- sys/rpc/clnt_rc.c | 2 +- sys/rpc/krpc.h | 5 ++--- sys/rpc/svc.h | 1 + sys/rpc/svc_vc.c | 12 ++---------- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/sys/fs/nfs/nfs_commonkrpc.c b/sys/fs/nfs/nfs_commonkrpc.c index 415bba961716..160329968fa2 100644 --- a/sys/fs/nfs/nfs_commonkrpc.c +++ b/sys/fs/nfs/nfs_commonkrpc.c @@ -492,11 +492,10 @@ newnfs_connect(struct nfsmount *nmp, struct nfssockreq *nrp, CLNT_CONTROL(client, CLSET_TLS, &one); } else { /* RDMA. */ - if (NFSHASNFSV4N(nmp) && cred != NULL) { + if (NFSHASNFSV4N(nmp) && cred != NULL && + svc_rdma_create_backchannel_call != NULL) { /* - * Set up the backchannel. svc_vc_create_backchannel() - * is sufficient. The rdma boolean in conn_cf will get - * set by the CLSET_BACKCHANNEL control. + * Set up the backchannel. */ /* * Make sure the nfscbd_pool doesn't get @@ -506,7 +505,8 @@ newnfs_connect(struct nfsmount *nmp, struct nfssockreq *nrp, if (nfs_numnfscbd > 0) { nfs_numnfscbd++; NFSD_UNLOCK(); - xprt = svc_vc_create_backchannel(nfscbd_pool); + xprt = svc_rdma_create_backchannel_call( + nfscbd_pool); CLNT_CONTROL(client, CLSET_BACKCHANNEL, xprt); NFSD_LOCK(); nfs_numnfscbd--; @@ -734,7 +734,7 @@ newnfs_request(struct nfsrv_descript *nd, struct nfsmount *nmp, struct ucred *authcred, *savcred; struct nfsclsession *sep; uint8_t sessionid[NFSX_V4SESSIONID]; - bool nextconn_set; + bool nextconn_set, has_mreduce; struct timespec trylater_delay, ts, waituntil; /* Initially 1msec. */ @@ -749,6 +749,10 @@ newnfs_request(struct nfsrv_descript *nd, struct nfsmount *nmp, return (ESTALE); } + has_mreduce = false; + if (nmp != NULL && NFSHASRDMA(nmp) && + (nd->nd_mreq->m_flags & M_PROTO11) != 0) + has_mreduce = true; /* * Set authcred, which is used to acquire RPC credentials to * the cred argument, by default. The crhold() should not be @@ -1536,7 +1540,8 @@ out: } #endif - rpc_remove_mreduce(nd->nd_mreq, false); /* Will be free'd by caller. */ + if (has_mreduce) + rpc_remove_mreduce(nd->nd_mreq, false); m_freem(nd->nd_mreq); if (usegssname == 0) AUTH_DESTROY(auth); diff --git a/sys/rpc/clnt_rc.c b/sys/rpc/clnt_rc.c index c19b3e5eefc8..9094c9d9ee14 100644 --- a/sys/rpc/clnt_rc.c +++ b/sys/rpc/clnt_rc.c @@ -51,7 +51,7 @@ xprt_rdma_check_route_ftype *rdma_check_route = NULL; clnt_rdma_create_ftype *clnt_rdma_create_call = NULL; -clnt_rdma_bcksend_ftype *clnt_rdma_bcksend_call = NULL; +svc_rdma_create_backchannel_ftype *svc_rdma_create_backchannel_call = NULL; static enum clnt_stat clnt_reconnect_call(CLIENT *, struct rpc_callextra *, rpcproc_t, struct mbuf *, struct mbuf **, struct timeval); diff --git a/sys/rpc/krpc.h b/sys/rpc/krpc.h index e0dea323d190..bfeee008a65c 100644 --- a/sys/rpc/krpc.h +++ b/sys/rpc/krpc.h @@ -51,8 +51,8 @@ typedef int xprt_rdma_check_route_ftype(struct vnet *vnet, struct sockaddr *dstaddr, uint32_t cbslots); extern xprt_rdma_check_route_ftype *rdma_check_route; -typedef bool_t clnt_rdma_bcksend_ftype(SVCXPRT *xprt, struct mbuf *m); -extern clnt_rdma_bcksend_ftype *clnt_rdma_bcksend_call; +typedef SVCXPRT *svc_rdma_create_backchannel_ftype(SVCPOOL *nfscbdool); +extern svc_rdma_create_backchannel_ftype *svc_rdma_create_backchannel_call; typedef CLIENT *clnt_rdma_create_ftype(struct sockaddr *raddr, const rpcprog_t prog, const rpcvers_t vers, int intrflag, @@ -153,7 +153,6 @@ struct cf_conn { /* kept in xprt->xp_p1 for actual connection */ struct mbuf *mreq; /* current record being built from mpending */ uint32_t resid; /* number of bytes needed for fragment */ bool_t eor; /* reading last fragment of current record */ - bool_t rdma; /* On an RDMA connection. */ }; void rpcnl_init(void); diff --git a/sys/rpc/svc.h b/sys/rpc/svc.h index 537dad0fdb65..f247b962c927 100644 --- a/sys/rpc/svc.h +++ b/sys/rpc/svc.h @@ -617,6 +617,7 @@ extern SVCXPRT *svc_vc_create(SVCPOOL *, struct socket *, */ extern SVCXPRT *svc_vc_create_backchannel(SVCPOOL *); +extern SVCXPRT *svc_rdma_create_backchannel(SVCPOOL *); extern void *clnt_bck_create(struct socket *, const rpcprog_t, const rpcvers_t); /* diff --git a/sys/rpc/svc_vc.c b/sys/rpc/svc_vc.c index 49a58b567e8f..24c09f182174 100644 --- a/sys/rpc/svc_vc.c +++ b/sys/rpc/svc_vc.c @@ -1063,7 +1063,6 @@ svc_vc_backchannel_reply(SVCXPRT *xprt, struct rpc_msg *msg, struct sockaddr *addr, struct mbuf *m, uint32_t *seq) { struct ct_data *ct; - struct cf_conn *cd = (struct cf_conn *)xprt->xp_p1; XDR xdrs; struct mbuf *mrep; bool_t stat = TRUE; @@ -1076,8 +1075,7 @@ svc_vc_backchannel_reply(SVCXPRT *xprt, struct rpc_msg *msg, * Leave space for record mark. */ mrep = m_gethdr(M_WAITOK, MT_DATA); - if (!cd->rdma) - mrep->m_data += sizeof(uint32_t); + mrep->m_data += sizeof(uint32_t); xdrmbuf_create(&xdrs, mrep, XDR_ENCODE); @@ -1091,13 +1089,7 @@ svc_vc_backchannel_reply(SVCXPRT *xprt, struct rpc_msg *msg, stat = xdr_replymsg(&xdrs, msg); } - if (stat && cd->rdma) { - KASSERT(clnt_rdma_bcksend_call != NULL, - ("svc_vc_backchannel_reply: RDMA set, but " - "clnt_rdma_bcksend_call NULL")); - - stat = clnt_rdma_bcksend_call(xprt, mrep); - } else if (stat) { + if (stat) { m_fixhdr(mrep); /*