PERFORCE change 165308 for review
Marko Zec
zec at FreeBSD.org
Sat Jun 27 14:19:57 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=165308
Change 165308 by zec at zec_amdx4 on 2009/06/27 14:19:06
Reshuffle CURVNET_SET() / CURVNET_RESTORE() placement in
order to mitigate recursion on curvnet and the associated
console noise.
Affected files ...
.. //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvkrpc.c#12 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/svc_dg.c#5 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/svc_generic.c#4 edit
.. //depot/projects/vimage-commit2/src/sys/rpc/svc_vc.c#9 edit
Differences ...
==== //depot/projects/vimage-commit2/src/sys/nfsserver/nfs_srvkrpc.c#12 (text+ko) ====
@@ -45,7 +45,6 @@
#include <sys/sysctl.h>
#include <sys/file.h>
#include <sys/filedesc.h>
-#include <sys/jail.h>
#include <sys/vnode.h>
#include <sys/malloc.h>
#include <sys/mount.h>
@@ -62,7 +61,6 @@
#include <sys/fcntl.h>
#include <sys/lockf.h>
#include <sys/eventhandler.h>
-#include <sys/vimage.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
@@ -459,12 +457,10 @@
* Steal the socket from userland so that it doesn't close
* unexpectedly.
*/
- CURVNET_SET(TD_TO_VNET(td));
if (so->so_type == SOCK_DGRAM)
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;
==== //depot/projects/vimage-commit2/src/sys/rpc/svc_dg.c#5 (text+ko) ====
@@ -128,6 +128,7 @@
xprt->xp_ops = &svc_dg_ops;
error = so->so_proto->pr_usrreqs->pru_sockaddr(so, &sa);
+ CURVNET_RESTORE();
if (error)
goto freedata;
@@ -146,7 +147,6 @@
if (xprt) {
svc_xprt_free(xprt);
}
- CURVNET_RESTORE();
return (NULL);
}
==== //depot/projects/vimage-commit2/src/sys/rpc/svc_generic.c#4 (text+ko) ====
@@ -48,6 +48,7 @@
#include "opt_inet6.h"
#include <sys/param.h>
+#include <sys/jail.h>
#include <sys/lock.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
@@ -59,6 +60,7 @@
#include <sys/systm.h>
#include <sys/sx.h>
#include <sys/ucred.h>
+#include <sys/vimage.h>
#include <rpc/rpc.h>
#include <rpc/rpcb_clnt.h>
@@ -228,11 +230,14 @@
/*
* It is an open socket. Get the transport info.
*/
+ CURVNET_SET(so->so_vnet);
if (!__rpc_socket2sockinfo(so, &si)) {
printf(
"svc_tli_create: could not get transport information\n");
+ CURVNET_RESTORE();
return (NULL);
}
+ CURVNET_RESTORE();
}
/*
@@ -259,7 +264,9 @@
"svc_tli_create: could not bind to requested address\n");
goto freedata;
}
+ CURVNET_SET(so->so_vnet);
solisten(so, (int)bindaddr->qlen, curthread);
+ CURVNET_RESTORE();
}
}
==== //depot/projects/vimage-commit2/src/sys/rpc/svc_vc.c#9 (text+ko) ====
@@ -153,9 +153,12 @@
xprt->xp_p2 = NULL;
xprt->xp_ops = &svc_vc_rendezvous_ops;
+ CURVNET_SET(so->so_vnet);
error = so->so_proto->pr_usrreqs->pru_sockaddr(so, &sa);
- if (error)
+ if (error) {
+ CURVNET_RESTORE();
goto cleanup_svc_vc_create;
+ }
memcpy(&xprt->xp_ltaddr, sa, sa->sa_len);
free(sa, M_SONAME);
@@ -163,6 +166,7 @@
xprt_register(xprt);
solisten(so, SOMAXCONN, curthread);
+ CURVNET_RESTORE();
SOCKBUF_LOCK(&so->so_rcv);
xprt->xp_upcallset = 1;
@@ -195,9 +199,12 @@
opt.sopt_name = SO_KEEPALIVE;
opt.sopt_val = &one;
opt.sopt_valsize = sizeof(one);
+ CURVNET_SET(so->so_vnet);
error = sosetopt(so, &opt);
- if (error)
+ if (error) {
+ CURVNET_RESTORE();
return (NULL);
+ }
if (so->so_proto->pr_protocol == IPPROTO_TCP) {
bzero(&opt, sizeof(struct sockopt));
@@ -207,9 +214,12 @@
opt.sopt_val = &one;
opt.sopt_valsize = sizeof(one);
error = sosetopt(so, &opt);
- if (error)
+ if (error) {
+ CURVNET_RESTORE();
return (NULL);
+ }
}
+ CURVNET_RESTORE();
cd = mem_alloc(sizeof(*cd));
cd->strm_stat = XPRT_IDLE;
More information about the p4-projects
mailing list