Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Jun 2009 19:48:00 GMT
From:      Marko Zec <zec@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 165201 for review
Message-ID:  <200906251948.n5PJm0Ew075104@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=165201

Change 165201 by zec@zec_amdx4 on 2009/06/25 19:47:34

	Reshuffle CURVNET_SET() / CURVNET_RESTORE() placement so
	that no recursion on curvnet happens in neither nfsserver
	nor nfsclient.

Affected files ...

.. //depot/projects/vimage-commit2/src/sys/nfsclient/nfs_krpc.c#8 edit
.. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvkrpc.c#11 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/clnt_vc.c#7 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/rpc_generic.c#3 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/svc.c#7 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/svc_vc.c#8 edit

Differences ...

==== //depot/projects/vimage-commit2/src/sys/nfsclient/nfs_krpc.c#8 (text+ko) ====

@@ -509,8 +509,6 @@
 	nf.nf_lastmsg = now.tv_sec -
 		((nmp->nm_tprintf_delay) - (nmp->nm_tprintf_initial_delay));
 
-	CURVNET_SET(nmp->nm_vnet);
-
 	/*
 	 * XXX if not already connected call nfs_connect now. Longer
 	 * term, change nfs_mount to call nfs_connect unconditionally
@@ -522,7 +520,6 @@
 	auth = nfs_getauth(nmp, cred);
 	if (!auth) {
 		m_freem(mreq);
-		CURVNET_RESTORE();
 		return (EACCES);
 	}
 	bzero(&ext, sizeof(ext));
@@ -603,7 +600,6 @@
 	if (error == ENOMEM) {
 		m_freem(mrep);
 		AUTH_DESTROY(auth);
-		CURVNET_RESTORE();
 		return (error);
 	}
 
@@ -668,7 +664,6 @@
 	*mdp = md;
 	*dposp = dpos;
 	AUTH_DESTROY(auth);
-	CURVNET_RESTORE();
 	return (0);
 
 nfsmout:
@@ -693,7 +688,6 @@
 	m_freem(mreq);
 	if (auth)
 		AUTH_DESTROY(auth);
-	CURVNET_RESTORE();
 	return (error);
 }
 

==== //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvkrpc.c#11 (text+ko) ====

@@ -464,6 +464,7 @@
 		xprt = svc_dg_create(nfsrv_pool, so, 0, 0);
 	else
 		xprt = svc_vc_create(nfsrv_pool, so, 0, 0);
+	CURVNET_RESTORE();
 	if (xprt) {
 		fp->f_ops = &badfileops;
 		fp->f_data = NULL;
@@ -471,7 +472,6 @@
 		svc_reg(xprt, NFS_PROG, NFS_VER3, nfssvc_program, NULL);
 		SVC_RELEASE(xprt);
 	}
-	CURVNET_RESTORE();
 
 	return (0);
 }
@@ -529,9 +529,7 @@
 			nfsrv_pool->sp_maxthreads = 4;
 		}
 			
-		CURVNET_SET(TD_TO_VNET(curthread));
 		svc_run(nfsrv_pool);
-		CURVNET_RESTORE();
 
 #ifdef KGSSAPI
 		rpc_gss_clear_svc_name(NFS_PROG, NFS_VER2);

==== //depot/projects/vimage-commit2/src/sys/rpc/clnt_vc.c#7 (text+ko) ====

@@ -70,6 +70,8 @@
 #include <sys/syslog.h>
 #include <sys/time.h>
 #include <sys/uio.h>
+#include <sys/vimage.h>
+
 #include <netinet/tcp.h>
 
 #include <rpc/rpc.h>
@@ -217,8 +219,11 @@
 		}
 	}
 
-	if (!__rpc_socket2sockinfo(so, &si))
+	CURVNET_SET(so->so_vnet);
+	if (!__rpc_socket2sockinfo(so, &si)) {
+		CURVNET_RESTORE();
 		goto err;
+	}
 
 	if (so->so_proto->pr_flags & PR_CONNREQUIRED) {
 		bzero(&sopt, sizeof(sopt));
@@ -239,6 +244,7 @@
 		sopt.sopt_valsize = sizeof(one);
 		sosetopt(so, &sopt);
 	}
+	CURVNET_RESTORE();
 
 	ct->ct_closeit = FALSE;
 

==== //depot/projects/vimage-commit2/src/sys/rpc/rpc_generic.c#3 (text+ko) ====

@@ -55,6 +55,7 @@
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/syslog.h>
+#include <sys/vimage.h>
 
 #include <rpc/rpc.h>
 #include <rpc/nettype.h>
@@ -822,6 +823,7 @@
 	sa->sa_len = salen;
 
 	if (*portp == 0) {
+		CURVNET_SET(so->so_vnet);
 		bzero(&opt, sizeof(opt));
 		opt.sopt_dir = SOPT_GET;
 		opt.sopt_level = proto;
@@ -829,12 +831,15 @@
 		opt.sopt_val = &old;
 		opt.sopt_valsize = sizeof(old);
 		error = sogetopt(so, &opt);
-		if (error)
+		if (error) {
+			CURVNET_RESTORE();
 			goto out;
+		}
 
 		opt.sopt_dir = SOPT_SET;
 		opt.sopt_val = &portlow;
 		error = sosetopt(so, &opt);
+		CURVNET_RESTORE();
 		if (error)
 			goto out;
 	}
@@ -845,7 +850,9 @@
 		if (error) {
 			opt.sopt_dir = SOPT_SET;
 			opt.sopt_val = &old;
+			CURVNET_SET(so->so_vnet);
 			sosetopt(so, &opt);
+			CURVNET_RESTORE();
 		}
 	}
 out:

==== //depot/projects/vimage-commit2/src/sys/rpc/svc.c#7 (text+ko) ====

@@ -793,8 +793,6 @@
 	/* now receive msgs from xprtprt (support batch calls) */
 	r = malloc(sizeof(*r), M_RPC, M_WAITOK|M_ZERO);
 
-	CURVNET_SET(TD_TO_VNET(curthread));
-
 	msg.rm_call.cb_cred.oa_base = r->rq_credarea;
 	msg.rm_call.cb_verf.oa_base = &r->rq_credarea[MAX_AUTH_BYTES];
 	r->rq_clntcred = &r->rq_credarea[2*MAX_AUTH_BYTES];
@@ -869,7 +867,6 @@
 		xprt_unregister(xprt);
 	}
 
-	CURVNET_RESTORE();
 	return (stat);
 }
 
@@ -895,9 +892,7 @@
 				 * dispatch method - they must call
 				 * svc_freereq.
 				 */
-				CURVNET_SET(TD_TO_VNET(curthread));
 				(*s->sc_dispatch)(rqstp, xprt);
-				CURVNET_RESTORE();
 				return;
 			}  /* found correct version */
 			prog_found = TRUE;

==== //depot/projects/vimage-commit2/src/sys/rpc/svc_vc.c#8 (text+ko) ====

@@ -58,6 +58,8 @@
 #include <sys/sx.h>
 #include <sys/systm.h>
 #include <sys/uio.h>
+#include <sys/vimage.h>
+
 #include <netinet/tcp.h>
 
 #include <rpc/rpc.h>
@@ -625,8 +627,10 @@
 		uio.uio_td = curthread;
 		m = NULL;
 		rcvflag = MSG_DONTWAIT;
+		CURVNET_SET(xprt->xp_socket->so_vnet);
 		error = soreceive(xprt->xp_socket, NULL, &uio, &m, NULL,
 		    &rcvflag);
+		CURVNET_RESTORE();
 
 		if (error == EWOULDBLOCK) {
 			/*



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