patch-2.4.20 linux-2.4.20/net/sunrpc/svc.c
Next file: linux-2.4.20/net/sunrpc/svcsock.c
Previous file: linux-2.4.20/net/sunrpc/sunrpc_syms.c
Back to the patch index
Back to the overall index
- Lines: 71
- Date:
Thu Nov 28 15:53:16 2002
- Orig file:
linux-2.4.19/net/sunrpc/svc.c
- Orig date:
Fri Sep 7 10:48:39 2001
diff -urN linux-2.4.19/net/sunrpc/svc.c linux-2.4.20/net/sunrpc/svc.c
@@ -31,10 +31,6 @@
{
struct svc_serv *serv;
-#ifdef RPC_DEBUG
- rpc_register_sysctl();
-#endif
-
if (!(serv = (struct svc_serv *) kmalloc(sizeof(*serv), GFP_KERNEL)))
return NULL;
@@ -44,6 +40,10 @@
serv->sv_stats = prog->pg_stats;
serv->sv_bufsz = bufsize? bufsize : 4096;
serv->sv_xdrsize = xdrsize;
+ INIT_LIST_HEAD(&serv->sv_threads);
+ INIT_LIST_HEAD(&serv->sv_sockets);
+ INIT_LIST_HEAD(&serv->sv_tempsocks);
+ INIT_LIST_HEAD(&serv->sv_permsocks);
spin_lock_init(&serv->sv_lock);
serv->sv_name = prog->pg_name;
@@ -67,13 +67,25 @@
serv->sv_nrthreads);
if (serv->sv_nrthreads) {
- if (--(serv->sv_nrthreads) != 0)
+ if (--(serv->sv_nrthreads) != 0) {
+ svc_sock_update_bufs(serv);
return;
+ }
} else
printk("svc_destroy: no threads for serv=%p!\n", serv);
- while ((svsk = serv->sv_allsocks) != NULL)
+ while (!list_empty(&serv->sv_tempsocks)) {
+ svsk = list_entry(serv->sv_tempsocks.next,
+ struct svc_sock,
+ sk_list);
+ svc_delete_socket(svsk);
+ }
+ while (!list_empty(&serv->sv_permsocks)) {
+ svsk = list_entry(serv->sv_permsocks.next,
+ struct svc_sock,
+ sk_list);
svc_delete_socket(svsk);
+ }
/* Unregister service with the portmapper */
svc_register(serv, 0, 0);
@@ -138,6 +150,7 @@
error = kernel_thread((int (*)(void *)) func, rqstp, 0);
if (error < 0)
goto out_thread;
+ svc_sock_update_bufs(serv);
error = 0;
out:
return error;
@@ -296,6 +309,12 @@
memset(rqstp->rq_argp, 0, procp->pc_argsize);
memset(rqstp->rq_resp, 0, procp->pc_ressize);
+ /* un-reserve some of the out-queue now that we have a
+ * better idea of reply size
+ */
+ if (procp->pc_xdrressize)
+ svc_reserve(rqstp, procp->pc_xdrressize<<2);
+
/* Call the function that processes the request. */
if (!versp->vs_dispatch) {
/* Decode arguments */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)