summaryrefslogtreecommitdiffstats
path: root/sys/fs/pseudofs/pseudofs_vncache.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-03-13 12:18:25 +0000
committerjeff <jeff@FreeBSD.org>2005-03-13 12:18:25 +0000
commit0d9df2e12d6a83b8934322f557844cc0bb7bd488 (patch)
treeaa27ba510f7c723270e0278e561283b717a36c7b /sys/fs/pseudofs/pseudofs_vncache.c
parent5d7c91ddde246cd0d3f506a01bb53ba5fb41dd5d (diff)
downloadFreeBSD-src-0d9df2e12d6a83b8934322f557844cc0bb7bd488.zip
FreeBSD-src-0d9df2e12d6a83b8934322f557844cc0bb7bd488.tar.gz
- The VI_DOOMED flag now signals the end of a vnode's relationship with
the filesystem. Check that rather than VI_XLOCK. - VOP_INACTIVE should no longer drop the vnode lock. - The vnode lock is required around calls to vrecycle() and vgone(). Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/fs/pseudofs/pseudofs_vncache.c')
-rw-r--r--sys/fs/pseudofs/pseudofs_vncache.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/fs/pseudofs/pseudofs_vncache.c b/sys/fs/pseudofs/pseudofs_vncache.c
index 3914908..ddbdb34 100644
--- a/sys/fs/pseudofs/pseudofs_vncache.c
+++ b/sys/fs/pseudofs/pseudofs_vncache.c
@@ -248,7 +248,9 @@ pfs_exit(void *arg, struct proc *p)
if (pvd->pvd_pid == p->p_pid) {
vnp = pvd->pvd_vnode;
mtx_unlock(&pfs_vncache_mutex);
+ VOP_LOCK(vnp, LK_EXCLUSIVE, curthread);
vgone(vnp);
+ VOP_UNLOCK(vnp, 0, curthread);
mtx_lock(&pfs_vncache_mutex);
pvd = pfs_vncache;
} else {
@@ -278,7 +280,9 @@ pfs_disable(struct pfs_node *pn)
if (pvd->pvd_pn == pn) {
vnp = pvd->pvd_vnode;
mtx_unlock(&pfs_vncache_mutex);
+ VOP_LOCK(vnp, LK_EXCLUSIVE, curthread);
vgone(vnp);
+ VOP_UNLOCK(vnp, 0, curthread);
mtx_lock(&pfs_vncache_mutex);
pvd = pfs_vncache;
} else {
OpenPOWER on IntegriCloud