summaryrefslogtreecommitdiffstats
path: root/sys/nfsserver
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2008-06-30 20:43:06 +0000
committerrwatson <rwatson@FreeBSD.org>2008-06-30 20:43:06 +0000
commit8805d22e343f9c4b23897204b50dcd29aed7ca3f (patch)
treeb0027a2b0a0a23260444010529f8516c40eb8393 /sys/nfsserver
parent0637892261c53e4c8d52dbbf18969cc5aa1159e4 (diff)
downloadFreeBSD-src-8805d22e343f9c4b23897204b50dcd29aed7ca3f.zip
FreeBSD-src-8805d22e343f9c4b23897204b50dcd29aed7ca3f.tar.gz
Remove spls from NFS server setup call; expand receive socket buffer
locking to cover full setup of socket upcalls; remove XXX about locking. MFC after: 3 weeks
Diffstat (limited to 'sys/nfsserver')
-rw-r--r--sys/nfsserver/nfs_syscalls.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/sys/nfsserver/nfs_syscalls.c b/sys/nfsserver/nfs_syscalls.c
index 52ba9d9..8f6796c 100644
--- a/sys/nfsserver/nfs_syscalls.c
+++ b/sys/nfsserver/nfs_syscalls.c
@@ -187,7 +187,7 @@ nfssvc_addsock(struct file *fp, struct sockaddr *mynam, struct thread *td)
int siz;
struct nfssvc_sock *slp;
struct socket *so;
- int error, s;
+ int error;
so = fp->f_data;
#if 0
@@ -267,18 +267,13 @@ nfssvc_addsock(struct file *fp, struct sockaddr *mynam, struct thread *td)
slp->ns_nam = mynam;
fhold(fp);
slp->ns_fp = fp;
- /*
- * XXXRW: Socket locking here?
- */
- s = splnet();
+ SOCKBUF_LOCK(&so->so_rcv);
so->so_upcallarg = (caddr_t)slp;
so->so_upcall = nfsrv_rcv;
- SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_flags |= SB_UPCALL;
SOCKBUF_UNLOCK(&so->so_rcv);
slp->ns_flag = (SLP_VALID | SLP_NEEDQ);
nfsrv_wakenfsd(slp);
- splx(s);
NFSD_UNLOCK();
return (0);
}
@@ -597,9 +592,9 @@ nfsrv_zapsock(struct nfssvc_sock *slp)
so = slp->ns_so;
SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_flags &= ~SB_UPCALL;
- SOCKBUF_UNLOCK(&so->so_rcv);
so->so_upcall = NULL;
so->so_upcallarg = NULL;
+ SOCKBUF_UNLOCK(&so->so_rcv);
soshutdown(so, SHUT_RDWR);
closef(fp, NULL);
NFSD_LOCK();
OpenPOWER on IntegriCloud