diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-03-17 22:05:47 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-03-17 22:05:47 +0000 |
commit | 27cfca1ec98e91261b1a5355d10a8996464b63af (patch) | |
tree | 8e895a53e372fa682b4c0a585b9377d67ed70d0e /net/sunrpc/svcsock.c | |
parent | 6a76fb7214c477ccf6582bd79c5b4ccc4f9c41b1 (diff) |
Look Ma' what I found on my harddisk ...
o New faster syscalls for 2.1.x, too
o Upgrade to 2.1.89.
Don't try to run this. It's flaky as hell. But feel free to debug ...
Diffstat (limited to 'net/sunrpc/svcsock.c')
-rw-r--r-- | net/sunrpc/svcsock.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c index 2701a8398..cec276857 100644 --- a/net/sunrpc/svcsock.c +++ b/net/sunrpc/svcsock.c @@ -131,10 +131,10 @@ svc_sock_dequeue(struct svc_serv *serv) { struct svc_sock *svsk; - disable_bh(NET_BH); + start_bh_atomic(); if ((svsk = serv->sv_sockets) != NULL) rpc_remove_list(&serv->sv_sockets, svsk); - enable_bh(NET_BH); + end_bh_atomic(); if (svsk) { dprintk("svc: socket %p dequeued\n", svsk->sk_sk); @@ -151,7 +151,7 @@ svc_sock_dequeue(struct svc_serv *serv) static inline void svc_sock_received(struct svc_sock *svsk, int count) { - disable_bh(NET_BH); + start_bh_atomic(); if ((svsk->sk_data -= count) < 0) { printk(KERN_NOTICE "svc: sk_data negative!\n"); svsk->sk_data = 0; @@ -163,7 +163,7 @@ svc_sock_received(struct svc_sock *svsk, int count) svsk->sk_sk); svc_sock_enqueue(svsk); } - enable_bh(NET_BH); + end_bh_atomic(); } /* @@ -172,7 +172,7 @@ svc_sock_received(struct svc_sock *svsk, int count) static inline void svc_sock_accepted(struct svc_sock *svsk) { - disable_bh(NET_BH); + start_bh_atomic(); svsk->sk_busy = 0; svsk->sk_conn--; if (svsk->sk_conn || svsk->sk_data || svsk->sk_close) { @@ -180,7 +180,7 @@ svc_sock_accepted(struct svc_sock *svsk) svsk->sk_sk); svc_sock_enqueue(svsk); } - enable_bh(NET_BH); + end_bh_atomic(); } /* @@ -739,9 +739,9 @@ again: if (signalled()) return -EINTR; - disable_bh(NET_BH); + start_bh_atomic(); if ((svsk = svc_sock_dequeue(serv)) != NULL) { - enable_bh(NET_BH); + end_bh_atomic(); rqstp->rq_sock = svsk; svsk->sk_inuse++; /* N.B. where is this decremented? */ } else { @@ -756,7 +756,7 @@ again: */ current->state = TASK_INTERRUPTIBLE; add_wait_queue(&rqstp->rq_wait, &wait); - enable_bh(NET_BH); + end_bh_atomic(); schedule(); if (!(svsk = rqstp->rq_sock)) { @@ -886,7 +886,7 @@ if (svsk->sk_sk == NULL) /* * Create socket for RPC service. */ -int +static int svc_create_socket(struct svc_serv *serv, int protocol, struct sockaddr_in *sin) { struct svc_sock *svsk; @@ -969,3 +969,19 @@ svc_delete_socket(struct svc_sock *svsk) /* svsk->sk_server = NULL; */ } } + +/* + * Make a socket for nfsd and lockd + */ +int +svc_makesock(struct svc_serv *serv, int protocol, unsigned short port) +{ + struct sockaddr_in sin; + + dprintk("svc: creating socket proto = %d\n", protocol); + sin.sin_family = AF_INET; + sin.sin_addr.s_addr = INADDR_ANY; + sin.sin_port = htons(port); + return svc_create_socket(serv, protocol, &sin); +} + |