Module Name: src Committed By: hannken Date: Thu Dec 1 14:49:04 UTC 2016
Modified Files: src/sys/kern: vfs_vnode.c src/tests/fs/puffs: t_basic.c Log Message: - Change vcache_reclaim() to always call VOP_INACTIVE() before VOP_RECLAIM(). When called from vrecycle() or vgone() there is a window where the refcount is greater than zero and another thread could get and release a reference that would miss VOP_INACTIVE() as the refcount doesn't drop to zero. Adjust test fs/puffs/t_basic: test VOP_INACTIVE count being greater zero. - Make vrecycle() more robust by checking v_usecount first and preventing further references across vn_lock(). Fixes a deadlock where one thread starts unmount, second thread locks a directory and allocates a vnode and first thread tries to vrecycle() the directory. First thread holds vfs_busy and wants vnode, second thread holds vnode and wants vfs_busy. - With these fixes in place change cleanvnode() to use vget()/vrecycle() to reclaim the vnode. To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/kern/vfs_vnode.c cvs rdiff -u -r1.12 -r1.13 src/tests/fs/puffs/t_basic.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.