Lines Matching refs:dl

65 dsl_deadlist_load_tree(dsl_deadlist_t *dl)  in dsl_deadlist_load_tree()  argument
70 ASSERT(MUTEX_HELD(&dl->dl_lock)); in dsl_deadlist_load_tree()
72 ASSERT(!dl->dl_oldfmt); in dsl_deadlist_load_tree()
73 if (dl->dl_havetree) in dsl_deadlist_load_tree()
76 avl_create(&dl->dl_tree, dsl_deadlist_compare, in dsl_deadlist_load_tree()
79 for (zap_cursor_init(&zc, dl->dl_os, dl->dl_object); in dsl_deadlist_load_tree()
84 VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, in dsl_deadlist_load_tree()
86 avl_add(&dl->dl_tree, dle); in dsl_deadlist_load_tree()
89 dl->dl_havetree = B_TRUE; in dsl_deadlist_load_tree()
93 dsl_deadlist_open(dsl_deadlist_t *dl, objset_t *os, uint64_t object) in dsl_deadlist_open() argument
97 ASSERT(!dsl_deadlist_is_open(dl)); in dsl_deadlist_open()
99 mutex_init(&dl->dl_lock, NULL, MUTEX_DEFAULT, NULL); in dsl_deadlist_open()
100 dl->dl_os = os; in dsl_deadlist_open()
101 dl->dl_object = object; in dsl_deadlist_open()
102 VERIFY3U(0, ==, dmu_bonus_hold(os, object, dl, &dl->dl_dbuf)); in dsl_deadlist_open()
103 dmu_object_info_from_db(dl->dl_dbuf, &doi); in dsl_deadlist_open()
105 dmu_buf_rele(dl->dl_dbuf, dl); in dsl_deadlist_open()
106 dl->dl_dbuf = NULL; in dsl_deadlist_open()
107 dl->dl_oldfmt = B_TRUE; in dsl_deadlist_open()
108 VERIFY3U(0, ==, bpobj_open(&dl->dl_bpobj, os, object)); in dsl_deadlist_open()
112 dl->dl_oldfmt = B_FALSE; in dsl_deadlist_open()
113 dl->dl_phys = dl->dl_dbuf->db_data; in dsl_deadlist_open()
114 dl->dl_havetree = B_FALSE; in dsl_deadlist_open()
118 dsl_deadlist_is_open(dsl_deadlist_t *dl) in dsl_deadlist_is_open() argument
120 return (dl->dl_os != NULL); in dsl_deadlist_is_open()
124 dsl_deadlist_close(dsl_deadlist_t *dl) in dsl_deadlist_close() argument
129 ASSERT(dsl_deadlist_is_open(dl)); in dsl_deadlist_close()
131 if (dl->dl_oldfmt) { in dsl_deadlist_close()
132 dl->dl_oldfmt = B_FALSE; in dsl_deadlist_close()
133 bpobj_close(&dl->dl_bpobj); in dsl_deadlist_close()
134 dl->dl_os = NULL; in dsl_deadlist_close()
135 dl->dl_object = 0; in dsl_deadlist_close()
139 if (dl->dl_havetree) { in dsl_deadlist_close()
140 while ((dle = avl_destroy_nodes(&dl->dl_tree, &cookie)) in dsl_deadlist_close()
145 avl_destroy(&dl->dl_tree); in dsl_deadlist_close()
147 dmu_buf_rele(dl->dl_dbuf, dl); in dsl_deadlist_close()
148 mutex_destroy(&dl->dl_lock); in dsl_deadlist_close()
149 dl->dl_dbuf = NULL; in dsl_deadlist_close()
150 dl->dl_phys = NULL; in dsl_deadlist_close()
151 dl->dl_os = NULL; in dsl_deadlist_close()
152 dl->dl_object = 0; in dsl_deadlist_close()
191 dle_enqueue(dsl_deadlist_t *dl, dsl_deadlist_entry_t *dle, in dle_enqueue() argument
194 ASSERT(MUTEX_HELD(&dl->dl_lock)); in dle_enqueue()
196 dmu_objset_pool(dl->dl_os)->dp_empty_bpobj) { in dle_enqueue()
197 uint64_t obj = bpobj_alloc(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); in dle_enqueue()
199 bpobj_decr_empty(dl->dl_os, tx); in dle_enqueue()
200 VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); in dle_enqueue()
201 VERIFY3U(0, ==, zap_update_int_key(dl->dl_os, dl->dl_object, in dle_enqueue()
208 dle_enqueue_subobj(dsl_deadlist_t *dl, dsl_deadlist_entry_t *dle, in dle_enqueue_subobj() argument
211 ASSERT(MUTEX_HELD(&dl->dl_lock)); in dle_enqueue_subobj()
213 dmu_objset_pool(dl->dl_os)->dp_empty_bpobj) { in dle_enqueue_subobj()
217 bpobj_decr_empty(dl->dl_os, tx); in dle_enqueue_subobj()
218 VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); in dle_enqueue_subobj()
219 VERIFY3U(0, ==, zap_update_int_key(dl->dl_os, dl->dl_object, in dle_enqueue_subobj()
225 dsl_deadlist_insert(dsl_deadlist_t *dl, const blkptr_t *bp, dmu_tx_t *tx) in dsl_deadlist_insert() argument
231 if (dl->dl_oldfmt) { in dsl_deadlist_insert()
232 bpobj_enqueue(&dl->dl_bpobj, bp, tx); in dsl_deadlist_insert()
236 mutex_enter(&dl->dl_lock); in dsl_deadlist_insert()
237 dsl_deadlist_load_tree(dl); in dsl_deadlist_insert()
239 dmu_buf_will_dirty(dl->dl_dbuf, tx); in dsl_deadlist_insert()
240 dl->dl_phys->dl_used += in dsl_deadlist_insert()
241 bp_get_dsize_sync(dmu_objset_spa(dl->dl_os), bp); in dsl_deadlist_insert()
242 dl->dl_phys->dl_comp += BP_GET_PSIZE(bp); in dsl_deadlist_insert()
243 dl->dl_phys->dl_uncomp += BP_GET_UCSIZE(bp); in dsl_deadlist_insert()
246 dle = avl_find(&dl->dl_tree, &dle_tofind, &where); in dsl_deadlist_insert()
248 dle = avl_nearest(&dl->dl_tree, where, AVL_BEFORE); in dsl_deadlist_insert()
250 dle = AVL_PREV(&dl->dl_tree, dle); in dsl_deadlist_insert()
251 dle_enqueue(dl, dle, bp, tx); in dsl_deadlist_insert()
252 mutex_exit(&dl->dl_lock); in dsl_deadlist_insert()
260 dsl_deadlist_add_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) in dsl_deadlist_add_key() argument
265 if (dl->dl_oldfmt) in dsl_deadlist_add_key()
271 mutex_enter(&dl->dl_lock); in dsl_deadlist_add_key()
272 dsl_deadlist_load_tree(dl); in dsl_deadlist_add_key()
274 obj = bpobj_alloc_empty(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_deadlist_add_key()
275 VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); in dsl_deadlist_add_key()
276 avl_add(&dl->dl_tree, dle); in dsl_deadlist_add_key()
278 VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, dl->dl_object, in dsl_deadlist_add_key()
280 mutex_exit(&dl->dl_lock); in dsl_deadlist_add_key()
287 dsl_deadlist_remove_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) in dsl_deadlist_remove_key() argument
292 if (dl->dl_oldfmt) in dsl_deadlist_remove_key()
295 mutex_enter(&dl->dl_lock); in dsl_deadlist_remove_key()
296 dsl_deadlist_load_tree(dl); in dsl_deadlist_remove_key()
299 dle = avl_find(&dl->dl_tree, &dle_tofind, NULL); in dsl_deadlist_remove_key()
300 dle_prev = AVL_PREV(&dl->dl_tree, dle); in dsl_deadlist_remove_key()
302 dle_enqueue_subobj(dl, dle_prev, dle->dle_bpobj.bpo_object, tx); in dsl_deadlist_remove_key()
304 avl_remove(&dl->dl_tree, dle); in dsl_deadlist_remove_key()
308 VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, mintxg, tx)); in dsl_deadlist_remove_key()
309 mutex_exit(&dl->dl_lock); in dsl_deadlist_remove_key()
319 dsl_deadlist_t dl = { 0 }; in dsl_deadlist_regenerate() local
322 dsl_deadlist_open(&dl, os, dlobj); in dsl_deadlist_regenerate()
323 if (dl.dl_oldfmt) { in dsl_deadlist_regenerate()
324 dsl_deadlist_close(&dl); in dsl_deadlist_regenerate()
331 dsl_deadlist_add_key(&dl, in dsl_deadlist_regenerate()
336 dsl_deadlist_close(&dl); in dsl_deadlist_regenerate()
340 dsl_deadlist_clone(dsl_deadlist_t *dl, uint64_t maxtxg, in dsl_deadlist_clone() argument
346 newobj = dsl_deadlist_alloc(dl->dl_os, tx); in dsl_deadlist_clone()
348 if (dl->dl_oldfmt) { in dsl_deadlist_clone()
349 dsl_deadlist_regenerate(dl->dl_os, newobj, mrs_obj, tx); in dsl_deadlist_clone()
353 mutex_enter(&dl->dl_lock); in dsl_deadlist_clone()
354 dsl_deadlist_load_tree(dl); in dsl_deadlist_clone()
356 for (dle = avl_first(&dl->dl_tree); dle; in dsl_deadlist_clone()
357 dle = AVL_NEXT(&dl->dl_tree, dle)) { in dsl_deadlist_clone()
363 obj = bpobj_alloc_empty(dl->dl_os, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_deadlist_clone()
364 VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, newobj, in dsl_deadlist_clone()
367 mutex_exit(&dl->dl_lock); in dsl_deadlist_clone()
372 dsl_deadlist_space(dsl_deadlist_t *dl, in dsl_deadlist_space() argument
375 ASSERT(dsl_deadlist_is_open(dl)); in dsl_deadlist_space()
376 if (dl->dl_oldfmt) { in dsl_deadlist_space()
377 VERIFY3U(0, ==, bpobj_space(&dl->dl_bpobj, in dsl_deadlist_space()
382 mutex_enter(&dl->dl_lock); in dsl_deadlist_space()
383 *usedp = dl->dl_phys->dl_used; in dsl_deadlist_space()
384 *compp = dl->dl_phys->dl_comp; in dsl_deadlist_space()
385 *uncompp = dl->dl_phys->dl_uncomp; in dsl_deadlist_space()
386 mutex_exit(&dl->dl_lock); in dsl_deadlist_space()
396 dsl_deadlist_space_range(dsl_deadlist_t *dl, uint64_t mintxg, uint64_t maxtxg, in dsl_deadlist_space_range() argument
403 if (dl->dl_oldfmt) { in dsl_deadlist_space_range()
404 VERIFY3U(0, ==, bpobj_space_range(&dl->dl_bpobj, in dsl_deadlist_space_range()
411 mutex_enter(&dl->dl_lock); in dsl_deadlist_space_range()
412 dsl_deadlist_load_tree(dl); in dsl_deadlist_space_range()
414 dle = avl_find(&dl->dl_tree, &dle_tofind, &where); in dsl_deadlist_space_range()
420 avl_nearest(&dl->dl_tree, where, AVL_AFTER) == NULL); in dsl_deadlist_space_range()
423 dle = AVL_NEXT(&dl->dl_tree, dle)) { in dsl_deadlist_space_range()
433 mutex_exit(&dl->dl_lock); in dsl_deadlist_space_range()
437 dsl_deadlist_insert_bpobj(dsl_deadlist_t *dl, uint64_t obj, uint64_t birth, in dsl_deadlist_insert_bpobj() argument
446 ASSERT(MUTEX_HELD(&dl->dl_lock)); in dsl_deadlist_insert_bpobj()
448 VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); in dsl_deadlist_insert_bpobj()
452 dsl_deadlist_load_tree(dl); in dsl_deadlist_insert_bpobj()
454 dmu_buf_will_dirty(dl->dl_dbuf, tx); in dsl_deadlist_insert_bpobj()
455 dl->dl_phys->dl_used += used; in dsl_deadlist_insert_bpobj()
456 dl->dl_phys->dl_comp += comp; in dsl_deadlist_insert_bpobj()
457 dl->dl_phys->dl_uncomp += uncomp; in dsl_deadlist_insert_bpobj()
460 dle = avl_find(&dl->dl_tree, &dle_tofind, &where); in dsl_deadlist_insert_bpobj()
462 dle = avl_nearest(&dl->dl_tree, where, AVL_BEFORE); in dsl_deadlist_insert_bpobj()
463 dle_enqueue_subobj(dl, dle, obj, tx); in dsl_deadlist_insert_bpobj()
469 dsl_deadlist_t *dl = arg; in dsl_deadlist_insert_cb() local
470 dsl_deadlist_insert(dl, bp, tx); in dsl_deadlist_insert_cb()
479 dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx) in dsl_deadlist_merge() argument
487 VERIFY3U(0, ==, dmu_object_info(dl->dl_os, obj, &doi)); in dsl_deadlist_merge()
490 VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); in dsl_deadlist_merge()
492 dsl_deadlist_insert_cb, dl, tx)); in dsl_deadlist_merge()
497 mutex_enter(&dl->dl_lock); in dsl_deadlist_merge()
498 for (zap_cursor_init(&zc, dl->dl_os, obj); in dsl_deadlist_merge()
502 dsl_deadlist_insert_bpobj(dl, za.za_first_integer, mintxg, tx); in dsl_deadlist_merge()
503 VERIFY3U(0, ==, zap_remove_int(dl->dl_os, obj, mintxg, tx)); in dsl_deadlist_merge()
507 VERIFY3U(0, ==, dmu_bonus_hold(dl->dl_os, obj, FTAG, &bonus)); in dsl_deadlist_merge()
512 mutex_exit(&dl->dl_lock); in dsl_deadlist_merge()
519 dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg, in dsl_deadlist_move_bpobj() argument
526 ASSERT(!dl->dl_oldfmt); in dsl_deadlist_move_bpobj()
528 mutex_enter(&dl->dl_lock); in dsl_deadlist_move_bpobj()
529 dmu_buf_will_dirty(dl->dl_dbuf, tx); in dsl_deadlist_move_bpobj()
530 dsl_deadlist_load_tree(dl); in dsl_deadlist_move_bpobj()
533 dle = avl_find(&dl->dl_tree, &dle_tofind, &where); in dsl_deadlist_move_bpobj()
535 dle = avl_nearest(&dl->dl_tree, where, AVL_AFTER); in dsl_deadlist_move_bpobj()
544 ASSERT3U(dl->dl_phys->dl_used, >=, used); in dsl_deadlist_move_bpobj()
545 ASSERT3U(dl->dl_phys->dl_comp, >=, comp); in dsl_deadlist_move_bpobj()
546 ASSERT3U(dl->dl_phys->dl_uncomp, >=, uncomp); in dsl_deadlist_move_bpobj()
547 dl->dl_phys->dl_used -= used; in dsl_deadlist_move_bpobj()
548 dl->dl_phys->dl_comp -= comp; in dsl_deadlist_move_bpobj()
549 dl->dl_phys->dl_uncomp -= uncomp; in dsl_deadlist_move_bpobj()
551 VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, in dsl_deadlist_move_bpobj()
554 dle_next = AVL_NEXT(&dl->dl_tree, dle); in dsl_deadlist_move_bpobj()
555 avl_remove(&dl->dl_tree, dle); in dsl_deadlist_move_bpobj()
560 mutex_exit(&dl->dl_lock); in dsl_deadlist_move_bpobj()