PERFORCE change 165201 for review
Marko Zec
zec at FreeBSD.org
Thu Jun 25 19:48:03 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165201
Change 165201 by zec at 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) {
/*
More information about the p4-projects
mailing list