]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/commit
MFC: r291150
authorrmacklem <rmacklem@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 5 Dec 2015 21:38:53 +0000 (21:38 +0000)
committerrmacklem <rmacklem@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Sat, 5 Dec 2015 21:38:53 +0000 (21:38 +0000)
commit45207ebb19a1279883e344fe46569f1aea359af1
treed8031cefd74dad50d37ce43a720029b712d391f1
parent0c07d4ebda06a3148c78e9e429ee6d8e0064b133
MFC: r291150
When the nfsd threads are terminated, the NFSv4 server state
(opens, locks, etc) is retained, which I believe is correct behaviour.
However, for NFSv4.1, the server also retained a reference to the xprt
(RPC transport socket structure) for the backchannel. This caused
svcpool_destroy() to not call SVC_DESTROY() for the xprt and allowed
a socket upcall to occur after the mutexes in the svcpool were destroyed,
causing a crash.
This patch fixes the code so that the backchannel xprt structure is
dereferenced just before svcpool_destroy() is called, so the code
does do an SVC_DESTROY() on the xprt, which shuts down the socket upcall.

git-svn-id: svn://svn.freebsd.org/base/stable/10@291869 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
sys/fs/nfs/nfs_var.h
sys/fs/nfsserver/nfs_nfsdkrpc.c
sys/fs/nfsserver/nfs_nfsdstate.c