diff options
author | phk <phk@FreeBSD.org> | 2004-09-16 15:58:18 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-09-16 15:58:18 +0000 |
commit | f3cf14c41e02a8e33cd7b54cef64b35e2202beb2 (patch) | |
tree | 44dc2507d414926f582fed654d21e2fbbc340b50 /sys/ufs | |
parent | 76d2723d976bb6970b056a9d0d8e6c2a078b64f0 (diff) | |
download | FreeBSD-src-f3cf14c41e02a8e33cd7b54cef64b35e2202beb2.zip FreeBSD-src-f3cf14c41e02a8e33cd7b54cef64b35e2202beb2.tar.gz |
Missed a place where snapshots were allocated in my last commit to
this file.
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_snapshot.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c index b4a181f..bde2abe 100644 --- a/sys/ufs/ffs/ffs_snapshot.c +++ b/sys/ufs/ffs/ffs_snapshot.c @@ -1760,7 +1760,7 @@ ffs_snapshot_mount(mp) struct thread *td = curthread; struct snapdata *sn; struct vnode *vp; - struct inode *ip, *xp; + struct inode *ip; struct uio auio; struct iovec aiov; void *snapblklist; @@ -1817,23 +1817,20 @@ ffs_snapshot_mount(mp) * lock and give up our original private lock. */ VI_LOCK(devvp); - if ((xp = TAILQ_FIRST(&sn->sn_head)) != NULL) { - struct lock *lkp; + if (sn != NULL) { - lkp = ITOV(xp)->v_vnlock; VI_UNLOCK(devvp); VI_LOCK(vp); - vp->v_vnlock = lkp; + vp->v_vnlock = &sn->sn_lock; } else { - struct lock *lkp; - VI_UNLOCK(devvp); - MALLOC(lkp, struct lock *, sizeof(struct lock), - M_UFSMNT, M_WAITOK); - lockinit(lkp, PVFS, "snaplk", VLKTIMEOUT, + 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_NOPAUSE); VI_LOCK(vp); - vp->v_vnlock = lkp; + vp->v_vnlock = &sn->sn_lock; + devvp->v_rdev->si_snapdata = sn; } vn_lock(vp, LK_INTERLOCK | LK_EXCLUSIVE | LK_RETRY, td); transferlockers(&vp->v_lock, vp->v_vnlock); |