Module Name: src Committed By: manu Date: Wed Jul 15 03:28:55 UTC 2015
Modified Files: src/sys/nfs: nfs_bio.c nfs_clntsocket.c nfs_iod.c nfs_socket.c nfs_var.h nfs_vfsops.c nfsmount.h Log Message: Fix soft NFS force unmount For many reasons, forcibly unmounting a soft NFS mount could hang forever. Here are the fixes: - Introduce decents timeouts in operation that awaited NFS server reply. - On timeout, fails operations on soft mounts with EIO. - Introduce NFSMNT_DISMNTFORCE to let the filesystem know that a force unmount is ongoing. This causes timeouts to be reduced and prevents the NFS client to attempt reconnecting to the NFS server. Also fix a race condition where some asynchronous I/O could reference destroyed mount structures. We fix this by awaiting asynchronous I/O to drain before proceeding. Reviewed by Chuck Silvers. To generate a diff of this commit: cvs rdiff -u -r1.190 -r1.191 src/sys/nfs/nfs_bio.c cvs rdiff -u -r1.2 -r1.3 src/sys/nfs/nfs_clntsocket.c cvs rdiff -u -r1.6 -r1.7 src/sys/nfs/nfs_iod.c cvs rdiff -u -r1.196 -r1.197 src/sys/nfs/nfs_socket.c cvs rdiff -u -r1.93 -r1.94 src/sys/nfs/nfs_var.h cvs rdiff -u -r1.229 -r1.230 src/sys/nfs/nfs_vfsops.c cvs rdiff -u -r1.52 -r1.53 src/sys/nfs/nfsmount.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.