svn commit: r360997 - in projects/nfs-over-tls/sys: fs/nfsclient rpc xdr
Rick Macklem
rmacklem at FreeBSD.org
Wed May 13 00:03:41 UTC 2020
Author: rmacklem
Date: Wed May 13 00:03:39 2020
New Revision: 360997
URL: https://svnweb.freebsd.org/changeset/base/360997
Log:
Get rid of the changes done to the krpc and xdr for dissecting ext_pgs mbufs.
Also do a few code cleanups, such as comments, printfs and whitespace
while at it.
All of the ext_pgs mbuf dissection code should now be out of this tree.
Modified:
projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c
projects/nfs-over-tls/sys/rpc/clnt.h
projects/nfs-over-tls/sys/rpc/clnt_bck.c
projects/nfs-over-tls/sys/rpc/clnt_vc.c
projects/nfs-over-tls/sys/rpc/svc.h
projects/nfs-over-tls/sys/rpc/svc_vc.c
projects/nfs-over-tls/sys/xdr/xdr_mbuf.c
Modified: projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/fs/nfsclient/nfs_clkrpc.c Wed May 13 00:03:39 2020 (r360997)
@@ -94,7 +94,7 @@ printf("cbprogram proc=%d\n", rqst->rq_proc);
rqst->rq_args = NULL;
newnfs_realign(&nd.nd_mrep, M_WAITOK);
nd.nd_md = nd.nd_mrep;
-printf("cbreq nd_md=%p offs=%d\n", nd.nd_md, rqst->rq_xprt->xp_mbufoffs);
+printf("cbreq nd_md=%p\n", nd.nd_md);
nd.nd_dpos = mtod(nd.nd_md, char *);
nd.nd_nam = svc_getrpccaller(rqst);
nd.nd_nam2 = rqst->rq_addr;
Modified: projects/nfs-over-tls/sys/rpc/clnt.h
==============================================================================
--- projects/nfs-over-tls/sys/rpc/clnt.h Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/rpc/clnt.h Wed May 13 00:03:39 2020 (r360997)
@@ -120,7 +120,6 @@ struct rpc_callextra {
void *rc_feedback_arg; /* argument for callback */
struct rpc_timers *rc_timers; /* optional RTT timers */
struct rpc_err rc_err; /* detailed call status */
- u_int rc_mbufoffs; /* Offset in resultsp mbuf */
};
#endif
Modified: projects/nfs-over-tls/sys/rpc/clnt_bck.c
==============================================================================
--- projects/nfs-over-tls/sys/rpc/clnt_bck.c Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/rpc/clnt_bck.c Wed May 13 00:03:39 2020 (r360997)
@@ -89,7 +89,6 @@ __FBSDID("$FreeBSD$");
#include <rpc/krpc.h>
#include <rpc/rpcsec_tls.h>
-
struct cmessage {
struct cmsghdr cmsg;
struct cmsgcred cmcred;
@@ -209,7 +208,6 @@ clnt_bck_call(
struct mbuf *mreq = NULL, *results;
struct ct_request *cr;
int error, maxextsiz;
- uint32_t junk;
#ifdef KERN_TLS
u_int maxlen;
#endif
@@ -425,9 +423,7 @@ got_reply:
ext->rc_feedback(FEEDBACK_OK, proc, ext->rc_feedback_arg);
xdrmbuf_create(&xdrs, cr->cr_mrep, XDR_DECODE);
- ok = xdr_uint32_t(&xdrs, &junk);
- if (ok)
- ok = xdr_replymsg(&xdrs, &reply_msg);
+ ok = xdr_replymsg(&xdrs, &reply_msg);
cr->cr_mrep = NULL;
if (ok) {
@@ -446,14 +442,6 @@ got_reply:
} else {
KASSERT(results,
("auth validated but no result"));
- if (ext) {
- if ((results->m_flags & M_NOMAP) !=
- 0)
- ext->rc_mbufoffs =
- xdrs.x_handy;
- else
- ext->rc_mbufoffs = 0;
- }
*resultsp = results;
}
} /* end successful completion */
Modified: projects/nfs-over-tls/sys/rpc/clnt_vc.c
==============================================================================
--- projects/nfs-over-tls/sys/rpc/clnt_vc.c Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/rpc/clnt_vc.c Wed May 13 00:03:39 2020 (r360997)
@@ -86,7 +86,6 @@ __FBSDID("$FreeBSD$");
#include <rpc/krpc.h>
#include <rpc/rpcsec_tls.h>
-
struct cmessage {
struct cmsghdr cmsg;
struct cmsgcred cmcred;
@@ -535,19 +534,6 @@ got_reply:
if (ext && ext->rc_feedback)
ext->rc_feedback(FEEDBACK_OK, proc, ext->rc_feedback_arg);
-#ifdef notnow
-{ struct mbuf *m, *m2;
-int txxxx;
-if (cr->cr_mrep != NULL) {
-txxxx = m_length(cr->cr_mrep, NULL);
-if (txxxx > 0) {
-m = mb_copym_ext_pgs(cr->cr_mrep, txxxx, 16384, M_WAITOK,
- mb_free_mext_pgs, &m2);
-m2 = cr->cr_mrep;
-cr->cr_mrep = m;
-m_freem(m2);
-} } }
-#endif
xdrmbuf_create(&xdrs, cr->cr_mrep, XDR_DECODE);
ok = xdr_replymsg(&xdrs, &reply_msg);
cr->cr_mrep = NULL;
@@ -569,14 +555,6 @@ m_freem(m2);
} else {
KASSERT(results,
("auth validated but no result"));
- if (ext) {
- if ((results->m_flags & M_NOMAP) !=
- 0)
- ext->rc_mbufoffs =
- xdrs.x_handy;
- else
- ext->rc_mbufoffs = 0;
- }
*resultsp = results;
}
} /* end successful completion */
@@ -932,7 +910,11 @@ clnt_vc_soupcall(struct socket *so, void *arg, int wai
CTASSERT(sizeof(xid_plus_direction) == 2 * sizeof(uint32_t));
- /* RPC-over-TLS needs to block reception during handshake upcall. */
+ /*
+ * RPC-over-TLS needs to block reception during
+ * upcalls since the upcall will be doing I/O on
+ * the socket via openssl library calls.
+ */
mtx_lock(&ct->ct_lock);
if (ct->ct_dontrcv) {
mtx_unlock(&ct->ct_lock);
@@ -942,15 +924,13 @@ clnt_vc_soupcall(struct socket *so, void *arg, int wai
/*
* If another thread is already here, it must be in
- * soreceive(), so just return.
+ * soreceive(), so just return to avoid races with it.
* ct_upcallrefs is protected by the SOCKBUF_LOCK(),
* which is held in this function, except when
* soreceive() is called.
*/
if (ct->ct_upcallrefs > 0)
-{ printf("soup another\n");
return (SU_OK);
-}
ct->ct_upcallrefs++;
/*
@@ -987,6 +967,7 @@ clnt_vc_soupcall(struct socket *so, void *arg, int wai
}
if (error != 0) {
wakeup_all:
+printf("wakeup_all err=%d\n", error);
mtx_lock(&ct->ct_lock);
ct->ct_error.re_status = RPC_CANTRECV;
ct->ct_error.re_errno = error;
Modified: projects/nfs-over-tls/sys/rpc/svc.h
==============================================================================
--- projects/nfs-over-tls/sys/rpc/svc.h Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/rpc/svc.h Wed May 13 00:03:39 2020 (r360997)
@@ -175,7 +175,6 @@ typedef struct __rpc_svcxprt {
int xp_upcallset; /* socket upcall is set up */
uint32_t xp_snd_cnt; /* # of bytes to send to socket */
uint32_t xp_snt_cnt; /* # of bytes sent to socket */
- u_int xp_mbufoffs; /* Offset into ext_pgs mbuf */
bool_t xp_dontrcv; /* Do not receive on the socket */
uint32_t xp_tls; /* RPC-over-TLS on socket */
uint64_t xp_sslsec; /* Userland SSL * */
Modified: projects/nfs-over-tls/sys/rpc/svc_vc.c
==============================================================================
--- projects/nfs-over-tls/sys/rpc/svc_vc.c Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/rpc/svc_vc.c Wed May 13 00:03:39 2020 (r360997)
@@ -76,7 +76,6 @@ __FBSDID("$FreeBSD$");
#include <security/mac/mac_framework.h>
-
static bool_t svc_vc_rendezvous_recv(SVCXPRT *, struct rpc_msg *,
struct sockaddr **, struct mbuf **);
static enum xprt_stat svc_vc_rendezvous_stat(SVCXPRT *);
@@ -593,32 +592,6 @@ svc_vc_process_pending(SVCXPRT *xprt)
struct socket *so = xprt->xp_socket;
struct mbuf *m;
-#ifdef notnow
-{ struct mbuf *m1, *m2, *m3, *m4;
- int txxxx;
- m3 = cd->mpending;
- m4 = NULL;
- while (m3 != NULL && (m3->m_flags & M_NOMAP) != 0) {
- m4 = m3;
- m3 = m3->m_next;
- }
- if (m3 != NULL) {
- txxxx = m_length(m3, NULL);
- if (txxxx > 0) {
- m1 = mb_copym_ext_pgs(m3, txxxx, 16384, M_WAITOK,
- mb_free_mext_pgs, &m2);
- if (m4 != NULL) {
- m4->m_next = m1;
- m_freem(m3);
- } else {
- m2 = cd->mpending;
- cd->mpending = m1;
- m_freem(m2);
- }
- }
- }
-}
-#endif
/*
* If cd->resid is non-zero, we have part of the
* record already, otherwise we are expecting a record
@@ -648,7 +621,7 @@ svc_vc_process_pending(SVCXPRT *xprt)
header = ntohl(header);
cd->eor = (header & 0x80000000) != 0;
cd->resid = header & 0x7fffffff;
- cd->resid += sizeof(uint32_t);
+ m_adj(cd->mpending, sizeof(uint32_t));
}
/*
@@ -661,14 +634,10 @@ svc_vc_process_pending(SVCXPRT *xprt)
while (cd->mpending && cd->resid) {
m = cd->mpending;
if (cd->mpending->m_next
- || cd->mpending->m_len > cd->resid) {
- if ((cd->mpending->m_flags & M_NOMAP) != 0)
- cd->mpending = mb_splitatpos_ext(
- cd->mpending, cd->resid, M_WAITOK);
- else
- cd->mpending = m_split(cd->mpending,
- cd->resid, M_WAITOK);
- } else
+ || cd->mpending->m_len > cd->resid)
+ cd->mpending = m_split(cd->mpending,
+ cd->resid, M_WAITOK);
+ else
cd->mpending = NULL;
if (cd->mreq)
m_last(cd->mreq)->m_next = m;
@@ -702,7 +671,7 @@ svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg,
struct socket* so = xprt->xp_socket;
XDR xdrs;
int error, rcvflag;
- uint32_t xid_plus_direction[3], junk;
+ uint32_t xid_plus_direction[2];
struct cmsghdr *cmsg;
struct tls_get_record tgr;
@@ -735,15 +704,15 @@ svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg,
m_copydata(cd->mreq, 0,
sizeof(xid_plus_direction),
(char *)xid_plus_direction);
+ xid_plus_direction[0] =
+ ntohl(xid_plus_direction[0]);
xid_plus_direction[1] =
ntohl(xid_plus_direction[1]);
- xid_plus_direction[2] =
- ntohl(xid_plus_direction[2]);
/* Check message direction. */
- if (xid_plus_direction[2] == REPLY) {
+ if (xid_plus_direction[1] == REPLY) {
clnt_bck_svccall(xprt->xp_p2,
cd->mreq,
- xid_plus_direction[1]);
+ xid_plus_direction[0]);
cd->mreq = NULL;
continue;
}
@@ -763,18 +732,13 @@ svc_vc_recv(SVCXPRT *xprt, struct rpc_msg *msg,
sx_xunlock(&xprt->xp_lock);
- if (! xdr_uint32_t(&xdrs, &junk) ||
- ! xdr_callmsg(&xdrs, msg)) {
+ if (! xdr_callmsg(&xdrs, msg)) {
XDR_DESTROY(&xdrs);
return (FALSE);
}
*addrp = NULL;
*mp = xdrmbuf_getall(&xdrs);
- if (((*mp)->m_flags & M_NOMAP) != 0)
- xprt->xp_mbufoffs = xdrs.x_handy;
- else
- xprt->xp_mbufoffs = 0;
XDR_DESTROY(&xdrs);
return (TRUE);
@@ -901,19 +865,6 @@ svc_vc_backchannel_recv(SVCXPRT *xprt, struct rpc_msg
sx_xunlock(&xprt->xp_lock);
printf("recv backch m=%p\n", m);
-#ifdef notnow
-{ struct mbuf *m1, *m2;
-int txxxx;
-if (m != NULL) {
-txxxx = m_length(m, NULL);
-if (txxxx > 0) {
-m1 = mb_copym_ext_pgs(m, txxxx, 16384, M_WAITOK,
- mb_free_mext_pgs, &m2);
-m2 = m;
-m = m1;
-m_freem(m2);
-} } }
-#endif
xdrmbuf_create(&xdrs, m, XDR_DECODE);
if (! xdr_callmsg(&xdrs, msg)) {
printf("recv backch callmsg failed\n");
@@ -922,11 +873,6 @@ printf("recv backch callmsg failed\n");
}
*addrp = NULL;
*mp = xdrmbuf_getall(&xdrs);
- if (((*mp)->m_flags & M_NOMAP) != 0)
- xprt->xp_mbufoffs = xdrs.x_handy;
- else
- xprt->xp_mbufoffs = 0;
-printf("backch offs=%d\n", xprt->xp_mbufoffs);
XDR_DESTROY(&xdrs);
return (TRUE);
}
Modified: projects/nfs-over-tls/sys/xdr/xdr_mbuf.c
==============================================================================
--- projects/nfs-over-tls/sys/xdr/xdr_mbuf.c Tue May 12 23:51:04 2020 (r360996)
+++ projects/nfs-over-tls/sys/xdr/xdr_mbuf.c Wed May 13 00:03:39 2020 (r360997)
@@ -122,10 +122,9 @@ xdrmbuf_getall(XDR *xdrs)
xdrs->x_private = NULL;
}
- if (m) {
- if ((m->m_flags & M_NOMAP) == 0)
- m_adj(m, xdrs->x_handy);
- } else
+ if (m)
+ m_adj(m, xdrs->x_handy);
+ else
m = m_get(M_WAITOK, MT_DATA);
return (m);
}
@@ -195,10 +194,7 @@ xdrmbuf_getbytes(XDR *xdrs, char *addr, u_int len)
sz = m->m_len - xdrs->x_handy;
if (sz > len)
sz = len;
- if ((m->m_flags & M_NOMAP) != 0)
- m_copydata(m, xdrs->x_handy, sz, addr);
- else
- bcopy(mtod(m, const char *) + xdrs->x_handy, addr, sz);
+ bcopy(mtod(m, const char *) + xdrs->x_handy, addr, sz);
addr += sz;
xdrs->x_handy += sz;
@@ -290,8 +286,6 @@ xdrmbuf_inline(XDR *xdrs, u_int len)
char *p;
if (!m)
- return (0);
- if ((m->m_flags & M_NOMAP) != 0)
return (0);
if (xdrs->x_op == XDR_ENCODE) {
available = M_TRAILINGSPACE(m) + (m->m_len - xdrs->x_handy);
More information about the svn-src-projects
mailing list