Lines Matching refs:sp

55 	rc_snapshot_t *sp;  in snapshot_alloc()  local
56 sp = uu_zalloc(sizeof (*sp)); in snapshot_alloc()
58 (void) pthread_mutex_init(&sp->rs_lock, NULL); in snapshot_alloc()
59 (void) pthread_cond_init(&sp->rs_cv, NULL); in snapshot_alloc()
61 sp->rs_refcnt++; in snapshot_alloc()
62 return (sp); in snapshot_alloc()
66 snapshot_free(rc_snapshot_t *sp) in snapshot_free() argument
70 assert(sp->rs_refcnt == 0 && sp->rs_childref == 0); in snapshot_free()
72 (void) pthread_mutex_destroy(&sp->rs_lock); in snapshot_free()
73 (void) pthread_cond_destroy(&sp->rs_cv); in snapshot_free()
75 for (lvl = sp->rs_levels; lvl != NULL; lvl = next) { in snapshot_free()
78 assert(lvl->rsl_parent == sp); in snapshot_free()
88 uu_free(sp); in snapshot_free()
92 rc_snapshot_hold(rc_snapshot_t *sp) in rc_snapshot_hold() argument
94 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snapshot_hold()
95 sp->rs_refcnt++; in rc_snapshot_hold()
96 assert(sp->rs_refcnt > 0); in rc_snapshot_hold()
97 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_hold()
101 rc_snapshot_rele(rc_snapshot_t *sp) in rc_snapshot_rele() argument
104 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snapshot_rele()
105 assert(sp->rs_refcnt > 0); in rc_snapshot_rele()
106 sp->rs_refcnt--; in rc_snapshot_rele()
107 done = ((sp->rs_flags & RC_SNAPSHOT_DEAD) && in rc_snapshot_rele()
108 sp->rs_refcnt == 0 && sp->rs_childref == 0); in rc_snapshot_rele()
109 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_rele()
112 snapshot_free(sp); in rc_snapshot_rele()
118 rc_snapshot_t *sp = lvl->rsl_parent; in rc_snaplevel_hold() local
119 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snaplevel_hold()
120 sp->rs_childref++; in rc_snaplevel_hold()
121 assert(sp->rs_childref > 0); in rc_snaplevel_hold()
122 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snaplevel_hold()
129 rc_snapshot_t *sp = lvl->rsl_parent; in rc_snaplevel_rele() local
130 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snaplevel_rele()
131 assert(sp->rs_childref > 0); in rc_snaplevel_rele()
132 sp->rs_childref--; in rc_snaplevel_rele()
133 done = ((sp->rs_flags & RC_SNAPSHOT_DEAD) && in rc_snaplevel_rele()
134 sp->rs_refcnt == 0 && sp->rs_childref == 0); in rc_snaplevel_rele()
135 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snaplevel_rele()
138 snapshot_free(sp); in rc_snaplevel_rele()
159 rc_snapshot_t *sp; in snapshot_lookup_unlocked() local
164 for (sp = bp->sb_head; sp != NULL; sp = sp->rs_hash_next) { in snapshot_lookup_unlocked()
165 if (sp->rs_snap_id == snap_id) { in snapshot_lookup_unlocked()
166 rc_snapshot_hold(sp); in snapshot_lookup_unlocked()
167 return (sp); in snapshot_lookup_unlocked()
174 snapshot_insert_unlocked(snapshot_bucket_t *bp, rc_snapshot_t *sp) in snapshot_insert_unlocked() argument
177 assert(bp == SNAPSHOT_BUCKET(sp->rs_snap_id)); in snapshot_insert_unlocked()
179 assert(sp->rs_hash_next == NULL); in snapshot_insert_unlocked()
181 sp->rs_hash_next = bp->sb_head; in snapshot_insert_unlocked()
182 bp->sb_head = sp; in snapshot_insert_unlocked()
186 snapshot_remove_unlocked(snapshot_bucket_t *bp, rc_snapshot_t *sp) in snapshot_remove_unlocked() argument
191 assert(bp == SNAPSHOT_BUCKET(sp->rs_snap_id)); in snapshot_remove_unlocked()
193 assert(sp->rs_hash_next == NULL); in snapshot_remove_unlocked()
196 if (*spp == sp) in snapshot_remove_unlocked()
199 assert(*spp == sp); in snapshot_remove_unlocked()
200 *spp = sp->rs_hash_next; in snapshot_remove_unlocked()
201 sp->rs_hash_next = NULL; in snapshot_remove_unlocked()
215 rc_snapshot_t *sp; in rc_snapshot_get() local
219 sp = snapshot_lookup_unlocked(bp, snap_id); in rc_snapshot_get()
220 if (sp != NULL) { in rc_snapshot_get()
222 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snapshot_get()
223 while (sp->rs_flags & RC_SNAPSHOT_FILLING) in rc_snapshot_get()
224 (void) pthread_cond_wait(&sp->rs_cv, &sp->rs_lock); in rc_snapshot_get()
226 if (sp->rs_flags & RC_SNAPSHOT_DEAD) { in rc_snapshot_get()
227 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_get()
228 rc_snapshot_rele(sp); in rc_snapshot_get()
231 assert(sp->rs_flags & RC_SNAPSHOT_READY); in rc_snapshot_get()
232 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_get()
233 *snpp = sp; in rc_snapshot_get()
236 sp = snapshot_alloc(); in rc_snapshot_get()
237 sp->rs_snap_id = snap_id; in rc_snapshot_get()
238 sp->rs_flags |= RC_SNAPSHOT_FILLING; in rc_snapshot_get()
239 snapshot_insert_unlocked(bp, sp); in rc_snapshot_get()
245 r = object_fill_snapshot(sp); in rc_snapshot_get()
253 snapshot_remove_unlocked(bp, sp); in rc_snapshot_get()
256 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snapshot_get()
257 sp->rs_flags &= ~RC_SNAPSHOT_FILLING; in rc_snapshot_get()
258 sp->rs_flags |= RC_SNAPSHOT_DEAD; in rc_snapshot_get()
259 (void) pthread_cond_broadcast(&sp->rs_cv); in rc_snapshot_get()
260 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_get()
261 rc_snapshot_rele(sp); /* may free sp */ in rc_snapshot_get()
264 (void) pthread_mutex_lock(&sp->rs_lock); in rc_snapshot_get()
265 sp->rs_flags &= ~RC_SNAPSHOT_FILLING; in rc_snapshot_get()
266 sp->rs_flags |= RC_SNAPSHOT_READY; in rc_snapshot_get()
267 (void) pthread_cond_broadcast(&sp->rs_cv); in rc_snapshot_get()
268 (void) pthread_mutex_unlock(&sp->rs_lock); in rc_snapshot_get()
269 *snpp = sp; in rc_snapshot_get()