Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 24 Apr 2020 14:55:08 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r360264 - in projects/nfs-over-tls/sys: kern rpc xdr
Message-ID:  <202004241455.03OEt8ut031870@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Fri Apr 24 14:55:07 2020
New Revision: 360264
URL: https://svnweb.freebsd.org/changeset/base/360264

Log:
  Make the code work with post-r359919 ext_pgs mbufs.
  
  The xdr_mbuf.c changes seemed to be missed in previous commits.

Modified:
  projects/nfs-over-tls/sys/kern/uipc_socket.c
  projects/nfs-over-tls/sys/rpc/rpc_generic.c
  projects/nfs-over-tls/sys/xdr/xdr_mbuf.c

Modified: projects/nfs-over-tls/sys/kern/uipc_socket.c
==============================================================================
--- projects/nfs-over-tls/sys/kern/uipc_socket.c	Fri Apr 24 14:53:55 2020	(r360263)
+++ projects/nfs-over-tls/sys/kern/uipc_socket.c	Fri Apr 24 14:55:07 2020	(r360264)
@@ -1557,8 +1557,10 @@ sosend_generic(struct socket *so, struct sockaddr *add
 #endif
 	if (uio != NULL)
 		resid = uio->uio_resid;
-	else
+	else if ((top->m_flags & M_PKTHDR) != 0)
 		resid = top->m_pkthdr.len;
+	else
+		resid = m_length(top, NULL);
 	/*
 	 * In theory resid should be unsigned.  However, space must be
 	 * signed, as it might be less than 0 if we over-committed, and we

Modified: projects/nfs-over-tls/sys/rpc/rpc_generic.c
==============================================================================
--- projects/nfs-over-tls/sys/rpc/rpc_generic.c	Fri Apr 24 14:53:55 2020	(r360263)
+++ projects/nfs-over-tls/sys/rpc/rpc_generic.c	Fri Apr 24 14:55:07 2020	(r360264)
@@ -954,9 +954,6 @@ _rpc_copym_into_ext_pgs(struct mbuf *mp, int maxextsiz
 			m2 = m2->m_next;
 		}
 	}
-	KASSERT(tlen == mhead->m_pkthdr.len,
-	    ("_rpc_copym_into_ext_pgs: tlen=%d pkthdrlen=%d",
-	    tlen, mhead->m_pkthdr.len));
 	return (mhead);
 }
 

Modified: projects/nfs-over-tls/sys/xdr/xdr_mbuf.c
==============================================================================
--- projects/nfs-over-tls/sys/xdr/xdr_mbuf.c	Fri Apr 24 14:53:55 2020	(r360263)
+++ projects/nfs-over-tls/sys/xdr/xdr_mbuf.c	Fri Apr 24 14:55:07 2020	(r360264)
@@ -122,9 +122,10 @@ xdrmbuf_getall(XDR *xdrs)
 		xdrs->x_private = NULL;
 	}
 
-	if (m)
-		m_adj(m, xdrs->x_handy);
-	else
+	if (m) {
+		if ((m->m_flags & M_NOMAP) == 0)
+			m_adj(m, xdrs->x_handy);
+	} else
 		m = m_get(M_WAITOK, MT_DATA);
 	return (m);
 }
@@ -194,7 +195,10 @@ xdrmbuf_getbytes(XDR *xdrs, char *addr, u_int len)
 		sz = m->m_len - xdrs->x_handy;
 		if (sz > len)
 			sz = len;
-		bcopy(mtod(m, const char *) + xdrs->x_handy, addr, sz);
+		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);
 
 		addr += sz;
 		xdrs->x_handy += sz;
@@ -286,6 +290,8 @@ 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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202004241455.03OEt8ut031870>