diff options
author | jeff <jeff@FreeBSD.org> | 2002-08-04 10:29:36 +0000 |
---|---|---|
committer | jeff <jeff@FreeBSD.org> | 2002-08-04 10:29:36 +0000 |
commit | 02517b6731ab2da44ce9b49260429744cf0114d5 (patch) | |
tree | e889f56910bf98cbee3be239655a9e4bbb928b2e /sys/ufs/ffs/ffs_snapshot.c | |
parent | a03ca02ee99a255a2c14a75ff8eb488960b13ea7 (diff) | |
download | FreeBSD-src-02517b6731ab2da44ce9b49260429744cf0114d5.zip FreeBSD-src-02517b6731ab2da44ce9b49260429744cf0114d5.tar.gz |
- Replace v_flag with v_iflag and v_vflag
- v_vflag is protected by the vnode lock and is used when synchronization
with VOP calls is needed.
- v_iflag is protected by interlock and is used for dealing with vnode
management issues. These flags include X/O LOCK, FREE, DOOMED, etc.
- All accesses to v_iflag and v_vflag have either been locked or marked with
mp_fixme's.
- Many ASSERT_VOP_LOCKED calls have been added where the locking was not
clear.
- Many functions in vfs_subr.c were restructured to provide for stronger
locking.
Idea stolen from: BSD/OS
Diffstat (limited to 'sys/ufs/ffs/ffs_snapshot.c')
-rw-r--r-- | sys/ufs/ffs/ffs_snapshot.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 1c66031..e5c825d 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -456,9 +456,12 @@ loop: panic("ffs_snapshot: %d already on list", ip->i_number); snaphead = &ip->i_devvp->v_rdev->si_snapshots; TAILQ_INSERT_TAIL(snaphead, ip, i_nextsnap); + + ASSERT_VOP_LOCKED(ip->i_devvp, "ffs_snapshot devvp"); ip->i_devvp->v_rdev->si_copyonwrite = ffs_copyonwrite; - ip->i_devvp->v_flag |= VCOPYONWRITE; - vp->v_flag |= VSYSTEM; + ip->i_devvp->v_vflag |= VV_COPYONWRITE; + ASSERT_VOP_LOCKED(vp, "ffs_snapshot vp"); + vp->v_vflag |= VV_SYSTEM; out1: /* * Resume operation on filesystem. @@ -1225,9 +1228,10 @@ ffs_snapremove(vp) devvp = ip->i_devvp; TAILQ_REMOVE(&devvp->v_rdev->si_snapshots, ip, i_nextsnap); ip->i_nextsnap.tqe_prev = 0; + ASSERT_VOP_LOCKED(devvp, "ffs_snapremove devvp"); if (TAILQ_FIRST(&devvp->v_rdev->si_snapshots) == 0) { devvp->v_rdev->si_copyonwrite = 0; - devvp->v_flag &= ~VCOPYONWRITE; + devvp->v_vflag &= ~VV_COPYONWRITE; } } /* @@ -1537,9 +1541,10 @@ ffs_snapshot_mount(mp) ip->i_number); else TAILQ_INSERT_TAIL(snaphead, ip, i_nextsnap); - vp->v_flag |= VSYSTEM; + vp->v_vflag |= VV_SYSTEM; ump->um_devvp->v_rdev->si_copyonwrite = ffs_copyonwrite; - ump->um_devvp->v_flag |= VCOPYONWRITE; + ASSERT_VOP_LOCKED(ump->um_devvp, "ffs_snapshot_mount"); + ump->um_devvp->v_vflag |= VV_COPYONWRITE; VOP_UNLOCK(vp, 0, td); } } @@ -1561,8 +1566,9 @@ ffs_snapshot_unmount(mp) if (xp->i_effnlink > 0) vrele(ITOV(xp)); } + ASSERT_VOP_LOCKED(ump->um_devvp, "ffs_snapshot_unmount"); ump->um_devvp->v_rdev->si_copyonwrite = 0; - ump->um_devvp->v_flag &= ~VCOPYONWRITE; + ump->um_devvp->v_vflag &= ~VV_COPYONWRITE; } /* |