Lines Matching refs:sn

216 	struct snapdata *sn;
224 sn = NULL;
670 sn = ffs_snapdata_acquire(devvp);
675 vp->v_vnlock = &sn->sn_lock;
677 xp = TAILQ_FIRST(&sn->sn_head);
702 if (sn->sn_blklist != NULL)
704 sn->sn_blklist = snapblklist;
705 sn->sn_listsize = blkp - snapblklist;
717 TAILQ_INSERT_TAIL(&sn->sn_head, ip, i_nextsnap);
728 KASSERT(error != 0 || (sn != NULL && copy_fs != NULL),
749 TAILQ_FOREACH(xp, &sn->sn_head, i_nextsnap) {
850 space = sn->sn_blklist;
851 sn->sn_blklist = snapblklist;
852 sn->sn_listsize = snaplistsize;
1604 struct snapdata *sn;
1611 sn = ITODEVVP(ip)->v_rdev->si_snapdata;
1612 if (sn != NULL)
1613 TAILQ_FOREACH(xp, &sn->sn_head, i_nextsnap)
1655 struct snapdata *sn;
1669 sn = devvp->v_rdev->si_snapdata;
1670 TAILQ_REMOVE(&sn->sn_head, ip, i_nextsnap);
1672 revert_snaplock(vp, devvp, sn);
1791 struct snapdata *sn;
1796 sn = devvp->v_rdev->si_snapdata;
1797 if (sn == NULL) {
1803 * Use LK_SLEEPFAIL because sn might be freed under us while
1806 if (lockmgr(&sn->sn_lock, LK_INTERLOCK | LK_EXCLUSIVE | LK_SLEEPFAIL,
1810 TAILQ_FOREACH(ip, &sn->sn_head, i_nextsnap) {
1986 lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
2000 struct snapdata *sn;
2021 sn = NULL;
2061 sn = ffs_snapdata_acquire(devvp);
2066 vp->v_vnlock = &sn->sn_lock;
2076 TAILQ_INSERT_TAIL(&sn->sn_head, ip, i_nextsnap);
2086 if (sn == NULL || vp == NULL)
2123 sn->sn_listsize = snaplistsize;
2124 sn->sn_blklist = (daddr_t *)snapblklist;
2136 struct snapdata *sn;
2141 sn = devvp->v_rdev->si_snapdata;
2142 while (sn != NULL && (xp = TAILQ_FIRST(&sn->sn_head)) != NULL) {
2144 TAILQ_REMOVE(&sn->sn_head, xp, i_nextsnap);
2146 lockmgr(&sn->sn_lock, LK_INTERLOCK | LK_EXCLUSIVE,
2149 revert_snaplock(vp, devvp, sn);
2156 sn = devvp->v_rdev->si_snapdata;
2170 struct snapdata *sn;
2177 sn = devvp->v_rdev->si_snapdata;
2178 if (sn == NULL || TAILQ_FIRST(&sn->sn_head) == NULL)
2180 fs = ITOFS(TAILQ_FIRST(&sn->sn_head));
2182 snapblklist = sn->sn_blklist;
2183 upper = sn->sn_listsize - 1;
2276 struct snapdata *sn;
2296 sn = devvp->v_rdev->si_snapdata;
2297 if (sn == NULL ||
2298 TAILQ_EMPTY(&sn->sn_head)) {
2302 ip = TAILQ_FIRST(&sn->sn_head);
2309 snapblklist = sn->sn_blklist;
2310 upper = sn->sn_listsize - 1;
2338 while (lockmgr(&sn->sn_lock, LK_INTERLOCK | LK_EXCLUSIVE | LK_SLEEPFAIL,
2341 sn = devvp->v_rdev->si_snapdata;
2342 if (sn == NULL ||
2343 TAILQ_EMPTY(&sn->sn_head)) {
2352 TAILQ_FOREACH(ip, &sn->sn_head, i_nextsnap) {
2493 struct snapdata *sn;
2503 sn = devvp->v_rdev->si_snapdata;
2504 if (sn == NULL) {
2508 if (lockmgr(&sn->sn_lock,
2513 TAILQ_FOREACH(ip, &sn->sn_head, i_nextsnap) {
2517 lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
2605 struct snapdata *sn;
2611 sn = LIST_FIRST(&snapfree);
2612 if (sn != NULL)
2613 LIST_REMOVE(sn, sn_link);
2615 if (sn != NULL)
2616 return (sn);
2620 sn = malloc(sizeof *sn, M_UFSMNT, M_WAITOK | M_ZERO);
2621 TAILQ_INIT(&sn->sn_head);
2622 lockinit(&sn->sn_lock, PVFS, "snaplk", VLKTIMEOUT,
2624 return (sn);
2633 ffs_snapdata_free(struct snapdata *sn)
2636 LIST_INSERT_HEAD(&snapfree, sn, sn_link);
2644 struct snapdata *sn;
2648 sn = devvp->v_rdev->si_snapdata;
2650 if (sn == NULL || TAILQ_FIRST(&sn->sn_head) != NULL ||
2656 lockmgr(&sn->sn_lock, LK_DRAIN|LK_INTERLOCK, VI_MTX(devvp));
2657 snapblklist = sn->sn_blklist;
2658 sn->sn_blklist = NULL;
2659 sn->sn_listsize = 0;
2660 lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
2663 ffs_snapdata_free(sn);
2677 struct snapdata *sn)
2687 for (i = 0; i <= sn->sn_lock.lk_recurse; i++) {
2697 KASSERT(vp->v_vnlock == &sn->sn_lock,
2700 while (sn->sn_lock.lk_recurse > 0)
2701 lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
2702 lockmgr(&sn->sn_lock, LK_RELEASE, NULL);
2708 struct snapdata *nsn, *sn;
2720 sn = devvp->v_rdev->si_snapdata;
2721 if (sn == NULL) {
2725 * snapdata. Publish sn with the sn_lock
2731 panic("leaked sn, lockmgr error %d", error);
2732 sn = devvp->v_rdev->si_snapdata = nsn;
2742 error = lockmgr(&sn->sn_lock, LK_INTERLOCK |
2754 return (sn);