Module Name: src Committed By: riz Date: Wed Nov 4 17:32:00 UTC 2015
Modified Files: src/sbin/umount [netbsd-7]: umount.c src/sys/nfs [netbsd-7]: nfs_bio.c nfs_clntsocket.c nfs_iod.c nfs_socket.c nfs_var.h nfs_vfsops.c nfsmount.h Log Message: Pull up following revision(s) (requested by manu in ticket #882): sbin/umount/umount.c: revision 1.48 sys/nfs/nfsmount.h: revision 1.53 sys/nfs/nfs_var.h: revision 1.94 sys/nfs/nfs_iod.c: revision 1.7 sys/nfs/nfs_socket.c: revision 1.197 sys/nfs/nfs_bio.c: revision 1.191 sys/nfs/nfs_vfsops.c: revision 1.230 sys/nfs/nfs_clntsocket.c: revision 1.3 Remove useless and harmful sync(2) call in umount(8) Remove sync(2) call before unmount(2) in umount(8). This sync(2) is useless since unmount(2) will perform a VFS_SYNC anyway. But moreover, this sync(2) may be harmful, as there are some situation where it cannot return (unreachable NFS server, for instance), causing umount -f to be uneffective. 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.47 -r1.47.6.1 src/sbin/umount/umount.c cvs rdiff -u -r1.189 -r1.189.4.1 src/sys/nfs/nfs_bio.c cvs rdiff -u -r1.1 -r1.1.40.1 src/sys/nfs/nfs_clntsocket.c cvs rdiff -u -r1.6 -r1.6.4.1 src/sys/nfs/nfs_iod.c cvs rdiff -u -r1.192 -r1.192.2.1 src/sys/nfs/nfs_socket.c cvs rdiff -u -r1.92 -r1.92.2.1 src/sys/nfs/nfs_var.h cvs rdiff -u -r1.229 -r1.229.2.1 src/sys/nfs/nfs_vfsops.c cvs rdiff -u -r1.52 -r1.52.2.1 src/sys/nfs/nfsmount.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.