summaryrefslogtreecommitdiffstats
path: root/sys/fs/devfs
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2008-01-08 04:45:24 +0000
committerjhb <jhb@FreeBSD.org>2008-01-08 04:45:24 +0000
commit77e5cd5541fd0e92ec5bf37f660a38f4a882d1c1 (patch)
treebc2472f90e549b9e31a048e7880b28c1e5200931 /sys/fs/devfs
parent0b7e3f244ae95be162d66ce3772f8dfebb182eeb (diff)
downloadFreeBSD-src-77e5cd5541fd0e92ec5bf37f660a38f4a882d1c1.zip
FreeBSD-src-77e5cd5541fd0e92ec5bf37f660a38f4a882d1c1.tar.gz
Lock the vnode interlock while reading v_usecount to update si_usecount
in a cdev in devfs_reclaim(). MFC after: 3 days Reviewed by: jeff (a while ago)
Diffstat (limited to 'sys/fs/devfs')
-rw-r--r--sys/fs/devfs/devfs_vnops.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index 7c753f1..6cae05e 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -992,17 +992,20 @@ devfs_reclaim(struct vop_reclaim_args *ap)
vnode_destroy_vobject(vp);
+ VI_LOCK(vp);
dev_lock();
dev = vp->v_rdev;
vp->v_rdev = NULL;
if (dev == NULL) {
dev_unlock();
+ VI_UNLOCK(vp);
return (0);
}
dev->si_usecount -= vp->v_usecount;
dev_unlock();
+ VI_UNLOCK(vp);
dev_rel(dev);
return (0);
}
OpenPOWER on IntegriCloud