diff options
author | jhb <jhb@FreeBSD.org> | 2008-01-08 04:45:24 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2008-01-08 04:45:24 +0000 |
commit | 77e5cd5541fd0e92ec5bf37f660a38f4a882d1c1 (patch) | |
tree | bc2472f90e549b9e31a048e7880b28c1e5200931 /sys/fs/devfs | |
parent | 0b7e3f244ae95be162d66ce3772f8dfebb182eeb (diff) | |
download | FreeBSD-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.c | 3 |
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); } |