diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/ufs/ffs/ffs_snapshot.c | 4 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 20 |
2 files changed, 2 insertions, 22 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index 70ba429..6b85472 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -522,7 +522,7 @@ loop: sn = malloc(sizeof *sn, M_UFSMNT, M_WAITOK | M_ZERO); TAILQ_INIT(&sn->sn_head); lockinit(&sn->sn_lock, PVFS, "snaplk", VLKTIMEOUT, - LK_CANRECURSE); + LK_CANRECURSE | LK_NOSHARE); VI_LOCK(vp); vp->v_vnlock = &sn->sn_lock; devvp->v_rdev->si_snapdata = sn; @@ -1846,7 +1846,7 @@ ffs_snapshot_mount(mp) sn = malloc(sizeof *sn, M_UFSMNT, M_WAITOK | M_ZERO); TAILQ_INIT(&sn->sn_head); lockinit(&sn->sn_lock, PVFS, "snaplk", VLKTIMEOUT, - LK_CANRECURSE); + LK_CANRECURSE | LK_NOSHARE); VI_LOCK(vp); vp->v_vnlock = &sn->sn_lock; devvp->v_rdev->si_snapdata = sn; diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 0362876..13b6272 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -330,9 +330,6 @@ loop: return (ffs_update(vp, wait)); } -/* - * Snapshots require all lock requests to be exclusive. - */ static int ffs_lock(ap) struct vop_lock_args /* { @@ -341,23 +338,6 @@ ffs_lock(ap) struct thread *a_td; } */ *ap; { - struct vnode *vp = ap->a_vp; - - /* - * v_data could be NULL if a thread attempts to lock a - * vnode that is being recycled. Just hit the normal - * vnode lock in this case. Grab the interlock so we may - * safely inspect the vnode. - */ - if ((ap->a_flags & LK_INTERLOCK) == 0) { - VI_LOCK(vp); - ap->a_flags |= LK_INTERLOCK; - } - if (vp->v_data && (VTOI(vp)->i_flags & SF_SNAPSHOT) && - ((ap->a_flags & LK_TYPE_MASK) == LK_SHARED)) { - ap->a_flags &= ~LK_TYPE_MASK; - ap->a_flags |= LK_EXCLUSIVE; - } return (VOP_LOCK_APV(&ufs_vnodeops, ap)); } |