summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-09-16 15:58:18 +0000
committerphk <phk@FreeBSD.org>2004-09-16 15:58:18 +0000
commitf3cf14c41e02a8e33cd7b54cef64b35e2202beb2 (patch)
tree44dc2507d414926f582fed654d21e2fbbc340b50 /sys/ufs
parent76d2723d976bb6970b056a9d0d8e6c2a078b64f0 (diff)
downloadFreeBSD-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.c19
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);
OpenPOWER on IntegriCloud