Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 May 2020 00:36:37 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r360945 - in projects/nfs-over-tls/sys/fs: nfs nfsserver
Message-ID:  <202005120036.04C0abmp061398@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Tue May 12 00:36:37 2020
New Revision: 360945
URL: https://svnweb.freebsd.org/changeset/base/360945

Log:
  Get rid of some more of the dissect code for ext_pgs mbufs.

Modified:
  projects/nfs-over-tls/sys/fs/nfs/nfs_commonport.c
  projects/nfs-over-tls/sys/fs/nfs/nfs_var.h
  projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c
  projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c

Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_commonport.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfs/nfs_commonport.c	Mon May 11 22:57:21 2020	(r360944)
+++ projects/nfs-over-tls/sys/fs/nfs/nfs_commonport.c	Tue May 12 00:36:37 2020	(r360945)
@@ -183,34 +183,8 @@ newnfs_realign(struct mbuf **pm, int how)
 {
 	struct mbuf *m, *n;
 	int off, space;
-	bool copyit;
 
 	++nfs_realign_test;
-
-	/*
-	 * For ext_pgs mbufs, just copy the entire chain if there is an
-	 * alignment problem.
-	 */
-	copyit = false;
-	m = *pm;
-	while ((m->m_flags & M_NOMAP) != 0) {
-		if ((m->m_len & 0x3) != 0 ||
-		    (m->m_ext_pgs.first_pg_off & 0x3) != 0) {
-			copyit = true;
-			break;
-		}
-		m = m->m_next;
-		if (m == NULL)
-			return (0);
-	}
-	if (copyit) {
-		m = mb_unmapped_to_ext(*pm);
-		if (m == NULL)
-			return (ENOMEM);
-		*pm = m;
-		return (0);
-	}
-
 	while ((m = *pm) != NULL) {
 		if ((m->m_len & 0x3) || (mtod(m, intptr_t) & 0x3)) {
 			/*

Modified: projects/nfs-over-tls/sys/fs/nfs/nfs_var.h
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfs/nfs_var.h	Mon May 11 22:57:21 2020	(r360944)
+++ projects/nfs-over-tls/sys/fs/nfs/nfs_var.h	Tue May 12 00:36:37 2020	(r360945)
@@ -750,7 +750,7 @@ int nfsvno_allocate(struct vnode *, off_t, off_t, stru
 int nfsvno_getxattr(struct vnode *, char *, uint32_t, struct ucred *,
     uint64_t, int, struct thread *, struct mbuf **, struct mbuf **, int *);
 int nfsvno_setxattr(struct vnode *, char *, int, struct mbuf *, char *,
-    int, int, struct ucred *, struct thread *);
+    struct ucred *, struct thread *);
 int nfsvno_rmxattr(struct nfsrv_descript *, struct vnode *, char *,
     struct ucred *, struct thread *);
 int nfsvno_listxattr(struct vnode *, uint64_t, struct ucred *, struct thread *,

Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c	Mon May 11 22:57:21 2020	(r360944)
+++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdport.c	Tue May 12 00:36:37 2020	(r360945)
@@ -114,8 +114,6 @@ static int nfsrv_createiovec_extpgs(int, int, struct m
     struct mbuf **, struct iovec **);
 static int nfsrv_createiovecw(int, struct mbuf *, char *, struct iovec **,
     int *);
-static int nfsrv_createiovecw_extpgs(int, struct mbuf *, char *, int,
-    int, struct iovec **, int *);
 static void nfsrv_pnfscreate(struct vnode *, struct vattr *, struct ucred *,
     NFSPROC_T *);
 static void nfsrv_pnfsremovesetup(struct vnode *, NFSPROC_T *, struct vnode **,
@@ -1032,92 +1030,6 @@ nfsrv_createiovecw(int retlen, struct mbuf *m, char *c
 }
 
 /*
- * Create the iovec for the mbuf chain passed in as an argument.
- * The "cp" argument is where the data starts within the first mbuf in
- * the chain. It returns the iovec and the iovcnt.
- * Same as above, but for ext_pgs mbufs.
- */
-static int
-nfsrv_createiovecw_extpgs(int retlen, struct mbuf *m, char *cp, int dextpg,
-    int dextpgsiz, struct iovec **ivpp, int *iovcntp)
-{
-	struct mbuf *mp;
-	struct mbuf_ext_pgs *pgs;
-	struct iovec *ivp;
-	int cnt, i, len, pgno;
-
-	/*
-	 * Loop through the mbuf chain, counting how many pages are
-	 * part of this write oepration, so the iovec size is known.
-	 */
-	cnt = 0;
-	len = retlen;
-	mp = m;
-	pgs = &mp->m_ext_pgs;
-	i = dextpgsiz;
-	pgno = dextpg;
-	while (len > 0) {
-		if (i > 0) {
-			len -= i;
-			cnt++;
-		}
-		if (len > 0) {
-			if (pgno == pgs->npgs - 1) {
-				mp = mp->m_next;
-				if (mp == NULL)
-					return (EBADRPC);
-				pgno = 0;
-				pgs = &mp->m_ext_pgs;
-			} else
-				pgno++;
-			if (pgno == 0)
-				i = mbuf_ext_pg_len(pgs, 0,
-				    pgs->first_pg_off);
-			else
-				i = mbuf_ext_pg_len(pgs, pgno, 0);
-		}
-	}
-
-	/* Now, create the iovec. */
-	mp = m;
-	*ivpp = ivp = malloc(cnt * sizeof (struct iovec), M_TEMP,
-	    M_WAITOK);
-	*iovcntp = cnt;
-	len = retlen;
-	pgs = &mp->m_ext_pgs;
-	i = dextpgsiz;
-	pgno = dextpg;
-	while (len > 0) {
-		if (i > 0) {
-			i = min(i, len);
-			ivp->iov_base = cp;
-			ivp->iov_len = i;
-			ivp++;
-			len -= i;
-		}
-		if (len > 0) {
-			if (pgno == pgs->npgs - 1) {
-				mp = mp->m_next;
-				if (mp == NULL)
-					return (EBADRPC);
-				pgno = 0;
-				pgs = &mp->m_ext_pgs;
-			} else
-				pgno++;
-			cp = (char *)(void *)
-			    PHYS_TO_DMAP(mp->m_epg_pa[pgno]);
-			if (pgno == 0) {
-				cp += pgs->first_pg_off;
-				i = mbuf_ext_pg_len(pgs, 0,
-				    pgs->first_pg_off);
-			} else
-				i = mbuf_ext_pg_len(pgs, pgno, 0);
-		}
-	}
-	return (0);
-}
-
-/*
  * Write vnode op from an mbuf list.
  */
 int
@@ -6435,8 +6347,7 @@ out:
  */
 int
 nfsvno_setxattr(struct vnode *vp, char *name, int len, struct mbuf *m,
-    char *cp, int dextpg, int dextpgsiz, struct ucred *cred,
-    struct thread *p)
+    char *cp, struct ucred *cred, struct thread *p)
 {
 	struct iovec *iv;
 	struct uio uio, *uiop = &uio;
@@ -6455,11 +6366,7 @@ nfsvno_setxattr(struct vnode *vp, char *name, int len,
 	uiop->uio_td = p;
 	uiop->uio_offset = 0;
 	uiop->uio_resid = len;
-	if ((m->m_flags & M_NOMAP) != 0)
-		error = nfsrv_createiovecw_extpgs(len, m, cp, dextpg,
-		    dextpgsiz, &iv, &cnt);
-	else
-		error = nfsrv_createiovecw(len, m, cp, &iv, &cnt);
+	error = nfsrv_createiovecw(len, m, cp, &iv, &cnt);
 	uiop->uio_iov = iv;
 	uiop->uio_iovcnt = cnt;
 	if (error == 0) {

Modified: projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c	Mon May 11 22:57:21 2020	(r360944)
+++ projects/nfs-over-tls/sys/fs/nfsserver/nfs_nfsdserv.c	Tue May 12 00:36:37 2020	(r360945)
@@ -5708,8 +5708,7 @@ nfsrvd_setxattr(struct nfsrv_descript *nd, __unused in
 	nd->nd_repstat = nfsvno_getattr(vp, &ova, nd, p, 1, &attrbits);
 	if (nd->nd_repstat == 0) {
 		nd->nd_repstat = nfsvno_setxattr(vp, name, len, nd->nd_md,
-		    nd->nd_dpos, nd->nd_dextpg, nd->nd_dextpgsiz, nd->nd_cred,
-		    p);
+		    nd->nd_dpos, nd->nd_cred, p);
 		if (nd->nd_repstat == ENXIO)
 			nd->nd_repstat = NFSERR_XATTR2BIG;
 	}



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