From nobody Mon Sep 14 00:14:38 2026 X-Original-To: dev-commits-src-main@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 4hjlyQ6f2Pz6rHKk for ; Mon, 14 Sep 2026 00:14:38 +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 4hjlyQ5dW6z4m1m for ; Mon, 14 Sep 2026 00:14:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789344878; 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=QZLzHbwGc1+2Y76KnwdybOBNIBqUgKVNobnE6miQWIUXsTtuv1GnjzZwCkHSSU3UXeizux eQuLjByO933f/F/Y4NC3868SyV9dPZJinDcjr/8vumxEBQgs+v4waxB0H8RwGT2pk8q4L3 7kFAcM/PsXIhhTN/Z+8WMy/vpq7o8N6dwNeDOGvjrRRAPjbGfGYUCO36L6T2URQouzhY7n dKzrWVy7CUofOXy7GLbDOCbkc4ZL/67QkjScteWzsowQvEI37zThMd7pAdW3mTvhZzvhiv MEBkDGG+J60gSqmSeGYKDomx4VFFuO/JXvjNeP/8TZLgq5lAaRrror+AU+lNlQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789344878; b=d15ybXTxmz+zfN3VSSJ1AUV/CofVDR3X+rprHuPUxu0M8MrXwMeb9Gf6gf4epkRzjCAhmg PRBofh0ti4Pdepd3XUCHcD2tpAR7aTPC+LIQvSaQUMGadJJ8PVT0MUSQqXBNFXVzU4Dz4f 5uCXxfzGJfFLtZZBKNHJG/QYceg3slNT3NCWjXxVdHLjfwenbBUEQ9m9Ow9i9MKauoKz9I yifuE+cvSUkmVM5EVncwopH7UmMoXOpyHsQ+29ugTH226cYaKLwnyj7xx9SBr1V+QkDot7 WAlUl2otMh9NMcLkC799jdH2upo0Y7jzxJ/ls1MMiJdJ19d4xk5B9FDgzDnfHQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789344878; 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=tTe/diHH9Vk+5kX0Z9ZB6wN5tq8i3OoeHxUj+WnNxyI1t/LjWGSHuUNvSxiskhg+DQbAgD Pg8YY7u6OApRdsM3TDtiV+k56Kf/2cZ/94I1wmjBZnsMBBHXYD/tWfRSjEN8RxedaP3ySc pDmRbQVP3hG9/dybogPkE0j7gezdwsoqocMeARVz2yyZdzITF0EPcxxRjt/kta9Lwuii5y rwNkXPmCWEdRe1j27nqklqj9nlo3JranZr1fCm+n1cyrkTuRneO4KPAXdJjHwhW1idWroM jYkfO38DjZoEBTjvTVFbr8aAGpMH5gXSER/9PQTxwXJV/fmWl5DF4fChL4hbpw== 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 4hjlyQ4PxWz15W2 for ; Mon, 14 Sep 2026 00:14:38 +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 the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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); /*