Module Name: src Committed By: martin Date: Sun Jul 10 09:42:34 UTC 2016
Modified Files: src/sys/nfs [netbsd-7]: nfs_clntsocket.c nfs_socket.c Log Message: Pull up following revision(s) (requested by christos in ticket #1184): sys/nfs/nfs_socket.c: revision 1.198 sys/nfs/nfs_clntsocket.c: revision 1.5 Serialize all access to the NFS request queue via splsoftnet(). Fixes random crashes. XXX: Pullup-7 To generate a diff of this commit: cvs rdiff -u -r1.1.40.1 -r1.1.40.2 src/sys/nfs/nfs_clntsocket.c cvs rdiff -u -r1.192.2.1 -r1.192.2.2 src/sys/nfs/nfs_socket.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/nfs/nfs_clntsocket.c diff -u src/sys/nfs/nfs_clntsocket.c:1.1.40.1 src/sys/nfs/nfs_clntsocket.c:1.1.40.2 --- src/sys/nfs/nfs_clntsocket.c:1.1.40.1 Wed Nov 4 17:32:00 2015 +++ src/sys/nfs/nfs_clntsocket.c Sun Jul 10 09:42:34 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_clntsocket.c,v 1.1.40.1 2015/11/04 17:32:00 riz Exp $ */ +/* $NetBSD: nfs_clntsocket.c,v 1.1.40.2 2016/07/10 09:42:34 martin Exp $ */ /* * Copyright (c) 1989, 1991, 1993, 1995 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_clntsocket.c,v 1.1.40.1 2015/11/04 17:32:00 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_clntsocket.c,v 1.1.40.2 2016/07/10 09:42:34 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -324,7 +324,7 @@ nfs_reply(struct nfsreq *myrep, struct l struct mbuf *mrep, *nam, *md; u_int32_t rxid, *tl; char *dpos, *cp2; - int error; + int error, s; /* * Loop around until we get our own reply @@ -402,6 +402,7 @@ nfsmout: * Loop through the request list to match up the reply * Iff no match, just drop the datagram */ + s = splsoftnet(); TAILQ_FOREACH(rep, &nfs_reqq, r_chain) { if (rep->r_mrep == NULL && rxid == rep->r_xid) { /* Found it.. */ @@ -465,6 +466,7 @@ nfsmout: break; } } + splx(s); nfs_rcvunlock(nmp); /* * If not matched to a request, drop it. Index: src/sys/nfs/nfs_socket.c diff -u src/sys/nfs/nfs_socket.c:1.192.2.1 src/sys/nfs/nfs_socket.c:1.192.2.2 --- src/sys/nfs/nfs_socket.c:1.192.2.1 Wed Nov 4 17:32:00 2015 +++ src/sys/nfs/nfs_socket.c Sun Jul 10 09:42:34 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: nfs_socket.c,v 1.192.2.1 2015/11/04 17:32:00 riz Exp $ */ +/* $NetBSD: nfs_socket.c,v 1.192.2.2 2016/07/10 09:42:34 martin Exp $ */ /* * Copyright (c) 1989, 1991, 1993, 1995 @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nfs_socket.c,v 1.192.2.1 2015/11/04 17:32:00 riz Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nfs_socket.c,v 1.192.2.2 2016/07/10 09:42:34 martin Exp $"); #ifdef _KERNEL_OPT #include "opt_nfs.h" @@ -358,7 +358,7 @@ nfs_reconnect(struct nfsreq *rep) { struct nfsreq *rp; struct nfsmount *nmp = rep->r_nmp; - int error; + int error, s; time_t before_ts; nfs_disconnect(nmp); @@ -393,6 +393,7 @@ nfs_reconnect(struct nfsreq *rep) * Loop through outstanding request list and fix up all requests * on old socket. */ + s = splsoftnet(); TAILQ_FOREACH(rp, &nfs_reqq, r_chain) { if (rp->r_nmp == nmp) { if ((rp->r_flags & R_MUSTRESEND) == 0) @@ -400,6 +401,7 @@ nfs_reconnect(struct nfsreq *rep) rp->r_rexmit = 0; } } + splx(s); return (0); }