Lines Matching refs:zilog
82 static void zil_async_to_sync(zilog_t *zilog, uint64_t foid);
117 zil_bp_tree_init(zilog_t *zilog) in zil_bp_tree_init() argument
119 avl_create(&zilog->zl_bp_tree, zil_bp_compare, in zil_bp_tree_init()
124 zil_bp_tree_fini(zilog_t *zilog) in zil_bp_tree_fini() argument
126 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_fini()
137 zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp) in zil_bp_tree_add() argument
139 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_add()
160 zil_header_in_syncing_context(zilog_t *zilog) in zil_header_in_syncing_context() argument
162 return ((zil_header_t *)zilog->zl_header); in zil_header_in_syncing_context()
166 zil_init_log_chain(zilog_t *zilog, blkptr_t *bp) in zil_init_log_chain() argument
172 zc->zc_word[ZIL_ZC_OBJSET] = dmu_objset_id(zilog->zl_os); in zil_init_log_chain()
180 zil_read_log_block(zilog_t *zilog, const blkptr_t *bp, blkptr_t *nbp, void *dst, in zil_read_log_block() argument
189 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_block()
192 if (!(zilog->zl_header->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) in zil_read_log_block()
198 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, in zil_read_log_block()
256 zil_read_log_data(zilog_t *zilog, const lr_write_t *lr, void *wbuf) in zil_read_log_data() argument
271 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_data()
274 SET_BOOKMARK(&zb, dmu_objset_id(zilog->zl_os), lr->lr_foid, in zil_read_log_data()
277 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, in zil_read_log_data()
293 zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, in zil_parse() argument
296 const zil_header_t *zh = zilog->zl_header; in zil_parse()
324 zil_bp_tree_init(zilog); in zil_parse()
333 if ((error = parse_blk_func(zilog, &blk, arg, txg)) != 0) in zil_parse()
342 error = zil_read_log_block(zilog, &blk, &next_blk, lrbuf, &end); in zil_parse()
352 if ((error = parse_lr_func(zilog, lr, arg, txg)) != 0) in zil_parse()
360 zilog->zl_parse_error = error; in zil_parse()
361 zilog->zl_parse_blk_seq = max_blk_seq; in zil_parse()
362 zilog->zl_parse_lr_seq = max_lr_seq; in zil_parse()
363 zilog->zl_parse_blk_count = blk_count; in zil_parse()
364 zilog->zl_parse_lr_count = lr_count; in zil_parse()
369 zil_bp_tree_fini(zilog); in zil_parse()
376 zil_claim_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t first_txg) in zil_claim_log_block() argument
383 zil_bp_tree_add(zilog, bp) != 0) in zil_claim_log_block()
386 return (zio_wait(zio_claim(NULL, zilog->zl_spa, in zil_claim_log_block()
392 zil_claim_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t first_txg) in zil_claim_log_record() argument
409 (error = zil_read_log_data(zilog, lr, NULL)) != 0) in zil_claim_log_record()
411 return (zil_claim_log_block(zilog, &lr->lr_blkptr, tx, first_txg)); in zil_claim_log_record()
416 zil_free_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t claim_txg) in zil_free_log_block() argument
418 zio_free_zil(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_block()
424 zil_free_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t claim_txg) in zil_free_log_record() argument
433 bp->blk_birth >= claim_txg && zil_bp_tree_add(zilog, bp) == 0 && in zil_free_log_record()
435 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_record()
441 zil_alloc_lwb(zilog_t *zilog, blkptr_t *bp, uint64_t txg) in zil_alloc_lwb() argument
446 lwb->lwb_zilog = zilog; in zil_alloc_lwb()
460 mutex_enter(&zilog->zl_lock); in zil_alloc_lwb()
461 list_insert_tail(&zilog->zl_lwb_list, lwb); in zil_alloc_lwb()
462 mutex_exit(&zilog->zl_lock); in zil_alloc_lwb()
472 zilog_dirty(zilog_t *zilog, uint64_t txg) in zilog_dirty() argument
474 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_dirty()
475 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zilog_dirty()
480 if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) { in zilog_dirty()
482 dmu_buf_add_ref(ds->ds_dbuf, zilog); in zilog_dirty()
487 zilog_is_dirty(zilog_t *zilog) in zilog_is_dirty() argument
489 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty()
492 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, t)) in zilog_is_dirty()
502 zil_create(zilog_t *zilog) in zil_create() argument
504 const zil_header_t *zh = zilog->zl_header; in zil_create()
514 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_create()
527 tx = dmu_tx_create(zilog->zl_os); in zil_create()
529 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_create()
533 zio_free_zil(zilog->zl_spa, txg, &blk); in zil_create()
537 error = zio_alloc_zil(zilog->zl_spa, txg, &blk, NULL, in zil_create()
538 ZIL_MIN_BLKSZ, zilog->zl_logbias == ZFS_LOGBIAS_LATENCY); in zil_create()
541 zil_init_log_chain(zilog, &blk); in zil_create()
548 lwb = zil_alloc_lwb(zilog, &blk, txg); in zil_create()
557 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_create()
575 zil_destroy(zilog_t *zilog, boolean_t keep_first) in zil_destroy() argument
577 const zil_header_t *zh = zilog->zl_header; in zil_destroy()
585 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_destroy()
587 zilog->zl_old_header = *zh; /* debugging aid */ in zil_destroy()
592 tx = dmu_tx_create(zilog->zl_os); in zil_destroy()
594 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_destroy()
597 mutex_enter(&zilog->zl_lock); in zil_destroy()
599 ASSERT3U(zilog->zl_destroy_txg, <, txg); in zil_destroy()
600 zilog->zl_destroy_txg = txg; in zil_destroy()
601 zilog->zl_keep_first = keep_first; in zil_destroy()
603 if (!list_is_empty(&zilog->zl_lwb_list)) { in zil_destroy()
606 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_destroy()
607 list_remove(&zilog->zl_lwb_list, lwb); in zil_destroy()
610 zio_free_zil(zilog->zl_spa, txg, &lwb->lwb_blk); in zil_destroy()
614 zil_destroy_sync(zilog, tx); in zil_destroy()
616 mutex_exit(&zilog->zl_lock); in zil_destroy()
622 zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_destroy_sync() argument
624 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_destroy_sync()
625 (void) zil_parse(zilog, zil_free_log_block, in zil_destroy_sync()
626 zil_free_log_record, tx, zilog->zl_header->zh_claim_txg); in zil_destroy_sync()
634 zilog_t *zilog; in zil_claim() local
653 zilog = dmu_objset_zil(os); in zil_claim()
654 zh = zil_header_in_syncing_context(zilog); in zil_claim()
656 if (spa_get_log_state(zilog->zl_spa) == SPA_LOG_CLEAR) { in zil_claim()
658 zio_free_zil(zilog->zl_spa, first_txg, &zh->zh_log); in zil_claim()
674 (void) zil_parse(zilog, zil_claim_log_block, in zil_claim()
677 zh->zh_claim_blk_seq = zilog->zl_parse_blk_seq; in zil_claim()
678 zh->zh_claim_lr_seq = zilog->zl_parse_lr_seq; in zil_claim()
679 if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) in zil_claim()
685 ASSERT3U(first_txg, ==, (spa_last_synced_txg(zilog->zl_spa) + 1)); in zil_claim()
699 zilog_t *zilog; in zil_check_log_chain() local
713 zilog = dmu_objset_zil(os); in zil_check_log_chain()
714 bp = (blkptr_t *)&zilog->zl_header->zh_log; in zil_check_log_chain()
743 error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, in zil_check_log_chain()
744 zilog->zl_header->zh_claim_txg ? -1ULL : spa_first_txg(os->os_spa)); in zil_check_log_chain()
764 zil_add_block(zilog_t *zilog, const blkptr_t *bp) in zil_add_block() argument
766 avl_tree_t *t = &zilog->zl_vdev_tree; in zil_add_block()
775 ASSERT(zilog->zl_writer); in zil_add_block()
782 mutex_enter(&zilog->zl_vdev_lock); in zil_add_block()
791 mutex_exit(&zilog->zl_vdev_lock); in zil_add_block()
795 zil_flush_vdevs(zilog_t *zilog) in zil_flush_vdevs() argument
797 spa_t *spa = zilog->zl_spa; in zil_flush_vdevs()
798 avl_tree_t *t = &zilog->zl_vdev_tree; in zil_flush_vdevs()
803 ASSERT(zilog->zl_writer); in zil_flush_vdevs()
839 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_write_done() local
859 mutex_enter(&zilog->zl_lock); in zil_lwb_write_done()
862 mutex_exit(&zilog->zl_lock); in zil_lwb_write_done()
876 zil_lwb_write_init(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_init() argument
884 if (zilog->zl_root_zio == NULL) { in zil_lwb_write_init()
885 zilog->zl_root_zio = zio_root(zilog->zl_spa, NULL, NULL, in zil_lwb_write_init()
889 lwb->lwb_zio = zio_rewrite(zilog->zl_root_zio, zilog->zl_spa, in zil_lwb_write_init()
916 #define USE_SLOG(zilog) (((zilog)->zl_logbias == ZFS_LOGBIAS_LATENCY) && \ argument
917 (((zilog)->zl_cur_used < zil_slog_limit) || \
918 ((zilog)->zl_itx_list_sz < (zil_slog_limit << 1))))
925 zil_lwb_write_start(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_start() argument
929 spa_t *spa = zilog->zl_spa; in zil_lwb_write_start()
955 tx = dmu_tx_create(zilog->zl_os); in zil_lwb_write_start()
957 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_lwb_write_start()
978 zil_blksz = zilog->zl_cur_used + sizeof (zil_chain_t); in zil_lwb_write_start()
984 zilog->zl_prev_blks[zilog->zl_prev_rotor] = zil_blksz; in zil_lwb_write_start()
986 zil_blksz = MAX(zil_blksz, zilog->zl_prev_blks[i]); in zil_lwb_write_start()
987 zilog->zl_prev_rotor = (zilog->zl_prev_rotor + 1) & (ZIL_PREV_BLKS - 1); in zil_lwb_write_start()
992 USE_SLOG(zilog)); in zil_lwb_write_start()
1001 nlwb = zil_alloc_lwb(zilog, bp, txg); in zil_lwb_write_start()
1004 zil_add_block(zilog, &lwb->lwb_blk); in zil_lwb_write_start()
1036 zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb) in zil_lwb_commit() argument
1049 ASSERT(zilog_is_dirty(zilog) || in zil_lwb_commit()
1050 spa_freeze_txg(zilog->zl_spa) != UINT64_MAX); in zil_lwb_commit()
1056 zilog->zl_cur_used += (reclen + dlen); in zil_lwb_commit()
1058 zil_lwb_write_init(zilog, lwb); in zil_lwb_commit()
1064 lwb = zil_lwb_write_start(zilog, lwb); in zil_lwb_commit()
1067 zil_lwb_write_init(zilog, lwb); in zil_lwb_commit()
1070 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_lwb_commit()
1084 if (txg > spa_freeze_txg(zilog->zl_spa)) in zil_lwb_commit()
1085 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_lwb_commit()
1098 error = zilog->zl_get_data( in zil_lwb_commit()
1101 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_lwb_commit()
1118 lrc->lrc_seq = ++zilog->zl_lr_seq; /* we are single threaded */ in zil_lwb_commit()
1205 zil_remove_async(zilog_t *zilog, uint64_t oid) in zil_remove_async() argument
1217 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_remove_async()
1220 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_remove_async()
1223 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_remove_async()
1249 zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx) in zil_itx_assign() argument
1263 zil_remove_async(zilog, itx->itx_oid); in zil_itx_assign()
1269 zil_async_to_sync(zilog, itx->itx_oid); in zil_itx_assign()
1271 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) in zil_itx_assign()
1276 itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_itx_assign()
1286 atomic_add_64(&zilog->zl_itx_list_sz, -itxg->itxg_sod); in zil_itx_assign()
1302 atomic_add_64(&zilog->zl_itx_list_sz, itx->itx_sod); in zil_itx_assign()
1322 zilog_dirty(zilog, txg); in zil_itx_assign()
1338 zil_clean(zilog_t *zilog, uint64_t synced_txg) in zil_clean() argument
1340 itxg_t *itxg = &zilog->zl_itxg[synced_txg & TXG_MASK]; in zil_clean()
1350 ASSERT(zilog->zl_clean_taskq != NULL); in zil_clean()
1351 atomic_add_64(&zilog->zl_itx_list_sz, -itxg->itxg_sod); in zil_clean()
1363 if (taskq_dispatch(zilog->zl_clean_taskq, in zil_clean()
1372 zil_get_commit_list(zilog_t *zilog) in zil_get_commit_list() argument
1375 list_t *commit_list = &zilog->zl_itx_commit_list; in zil_get_commit_list()
1378 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_get_commit_list()
1381 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_get_commit_list()
1384 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_get_commit_list()
1398 atomic_add_64(&zilog->zl_itx_list_sz, -push_sod); in zil_get_commit_list()
1405 zil_async_to_sync(zilog_t *zilog, uint64_t foid) in zil_async_to_sync() argument
1412 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_async_to_sync()
1415 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_async_to_sync()
1418 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_async_to_sync()
1454 zil_commit_writer(zilog_t *zilog) in zil_commit_writer() argument
1459 spa_t *spa = zilog->zl_spa; in zil_commit_writer()
1462 ASSERT(zilog->zl_root_zio == NULL); in zil_commit_writer()
1464 mutex_exit(&zilog->zl_lock); in zil_commit_writer()
1466 zil_get_commit_list(zilog); in zil_commit_writer()
1472 if (list_head(&zilog->zl_itx_commit_list) == NULL) { in zil_commit_writer()
1473 mutex_enter(&zilog->zl_lock); in zil_commit_writer()
1477 if (zilog->zl_suspend) { in zil_commit_writer()
1480 lwb = list_tail(&zilog->zl_lwb_list); in zil_commit_writer()
1482 lwb = zil_create(zilog); in zil_commit_writer()
1485 DTRACE_PROBE1(zil__cw1, zilog_t *, zilog); in zil_commit_writer()
1486 while (itx = list_head(&zilog->zl_itx_commit_list)) { in zil_commit_writer()
1491 lwb = zil_lwb_commit(zilog, itx, lwb); in zil_commit_writer()
1492 list_remove(&zilog->zl_itx_commit_list, itx); in zil_commit_writer()
1496 DTRACE_PROBE1(zil__cw2, zilog_t *, zilog); in zil_commit_writer()
1500 lwb = zil_lwb_write_start(zilog, lwb); in zil_commit_writer()
1502 zilog->zl_cur_used = 0; in zil_commit_writer()
1507 if (zilog->zl_root_zio) { in zil_commit_writer()
1508 error = zio_wait(zilog->zl_root_zio); in zil_commit_writer()
1509 zilog->zl_root_zio = NULL; in zil_commit_writer()
1510 zil_flush_vdevs(zilog); in zil_commit_writer()
1514 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_writer()
1516 mutex_enter(&zilog->zl_lock); in zil_commit_writer()
1524 zilog->zl_commit_lr_seq = zilog->zl_lr_seq; in zil_commit_writer()
1551 zil_commit(zilog_t *zilog, uint64_t foid) in zil_commit() argument
1555 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_commit()
1559 zil_async_to_sync(zilog, foid); in zil_commit()
1561 mutex_enter(&zilog->zl_lock); in zil_commit()
1562 mybatch = zilog->zl_next_batch; in zil_commit()
1563 while (zilog->zl_writer) { in zil_commit()
1564 cv_wait(&zilog->zl_cv_batch[mybatch & 1], &zilog->zl_lock); in zil_commit()
1565 if (mybatch <= zilog->zl_com_batch) { in zil_commit()
1566 mutex_exit(&zilog->zl_lock); in zil_commit()
1571 zilog->zl_next_batch++; in zil_commit()
1572 zilog->zl_writer = B_TRUE; in zil_commit()
1573 zil_commit_writer(zilog); in zil_commit()
1574 zilog->zl_com_batch = mybatch; in zil_commit()
1575 zilog->zl_writer = B_FALSE; in zil_commit()
1576 mutex_exit(&zilog->zl_lock); in zil_commit()
1579 cv_signal(&zilog->zl_cv_batch[(mybatch+1) & 1]); in zil_commit()
1582 cv_broadcast(&zilog->zl_cv_batch[mybatch & 1]); in zil_commit()
1589 zil_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_sync() argument
1591 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_sync()
1593 spa_t *spa = zilog->zl_spa; in zil_sync()
1594 uint64_t *replayed_seq = &zilog->zl_replayed_seq[txg & TXG_MASK]; in zil_sync()
1604 mutex_enter(&zilog->zl_lock); in zil_sync()
1606 ASSERT(zilog->zl_stop_sync == 0); in zil_sync()
1614 if (zilog->zl_destroy_txg == txg) { in zil_sync()
1617 ASSERT(list_head(&zilog->zl_lwb_list) == NULL); in zil_sync()
1620 bzero(zilog->zl_replayed_seq, sizeof (zilog->zl_replayed_seq)); in zil_sync()
1622 if (zilog->zl_keep_first) { in zil_sync()
1631 zil_init_log_chain(zilog, &blk); in zil_sync()
1636 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_sync()
1640 list_remove(&zilog->zl_lwb_list, lwb); in zil_sync()
1650 if (list_head(&zilog->zl_lwb_list) == NULL) in zil_sync()
1653 mutex_exit(&zilog->zl_lock); in zil_sync()
1670 zil_set_sync(zilog_t *zilog, uint64_t sync) in zil_set_sync() argument
1672 zilog->zl_sync = sync; in zil_set_sync()
1676 zil_set_logbias(zilog_t *zilog, uint64_t logbias) in zil_set_logbias() argument
1678 zilog->zl_logbias = logbias; in zil_set_logbias()
1684 zilog_t *zilog; in zil_alloc() local
1686 zilog = kmem_zalloc(sizeof (zilog_t), KM_SLEEP); in zil_alloc()
1688 zilog->zl_header = zh_phys; in zil_alloc()
1689 zilog->zl_os = os; in zil_alloc()
1690 zilog->zl_spa = dmu_objset_spa(os); in zil_alloc()
1691 zilog->zl_dmu_pool = dmu_objset_pool(os); in zil_alloc()
1692 zilog->zl_destroy_txg = TXG_INITIAL - 1; in zil_alloc()
1693 zilog->zl_logbias = dmu_objset_logbias(os); in zil_alloc()
1694 zilog->zl_sync = dmu_objset_syncprop(os); in zil_alloc()
1695 zilog->zl_next_batch = 1; in zil_alloc()
1697 mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
1700 mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, in zil_alloc()
1704 list_create(&zilog->zl_lwb_list, sizeof (lwb_t), in zil_alloc()
1707 list_create(&zilog->zl_itx_commit_list, sizeof (itx_t), in zil_alloc()
1710 mutex_init(&zilog->zl_vdev_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
1712 avl_create(&zilog->zl_vdev_tree, zil_vdev_compare, in zil_alloc()
1715 cv_init(&zilog->zl_cv_writer, NULL, CV_DEFAULT, NULL); in zil_alloc()
1716 cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); in zil_alloc()
1717 cv_init(&zilog->zl_cv_batch[0], NULL, CV_DEFAULT, NULL); in zil_alloc()
1718 cv_init(&zilog->zl_cv_batch[1], NULL, CV_DEFAULT, NULL); in zil_alloc()
1720 return (zilog); in zil_alloc()
1724 zil_free(zilog_t *zilog) in zil_free() argument
1726 zilog->zl_stop_sync = 1; in zil_free()
1728 ASSERT0(zilog->zl_suspend); in zil_free()
1729 ASSERT0(zilog->zl_suspending); in zil_free()
1731 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_free()
1732 list_destroy(&zilog->zl_lwb_list); in zil_free()
1734 avl_destroy(&zilog->zl_vdev_tree); in zil_free()
1735 mutex_destroy(&zilog->zl_vdev_lock); in zil_free()
1737 ASSERT(list_is_empty(&zilog->zl_itx_commit_list)); in zil_free()
1738 list_destroy(&zilog->zl_itx_commit_list); in zil_free()
1748 if (zilog->zl_itxg[i].itxg_itxs) in zil_free()
1749 zil_itxg_clean(zilog->zl_itxg[i].itxg_itxs); in zil_free()
1750 mutex_destroy(&zilog->zl_itxg[i].itxg_lock); in zil_free()
1753 mutex_destroy(&zilog->zl_lock); in zil_free()
1755 cv_destroy(&zilog->zl_cv_writer); in zil_free()
1756 cv_destroy(&zilog->zl_cv_suspend); in zil_free()
1757 cv_destroy(&zilog->zl_cv_batch[0]); in zil_free()
1758 cv_destroy(&zilog->zl_cv_batch[1]); in zil_free()
1760 kmem_free(zilog, sizeof (zilog_t)); in zil_free()
1769 zilog_t *zilog = dmu_objset_zil(os); in zil_open() local
1771 ASSERT(zilog->zl_clean_taskq == NULL); in zil_open()
1772 ASSERT(zilog->zl_get_data == NULL); in zil_open()
1773 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_open()
1775 zilog->zl_get_data = get_data; in zil_open()
1776 zilog->zl_clean_taskq = taskq_create("zil_clean", 1, minclsyspri, in zil_open()
1779 return (zilog); in zil_open()
1786 zil_close(zilog_t *zilog) in zil_close() argument
1791 zil_commit(zilog, 0); /* commit all itx */ in zil_close()
1799 mutex_enter(&zilog->zl_lock); in zil_close()
1800 lwb = list_tail(&zilog->zl_lwb_list); in zil_close()
1803 mutex_exit(&zilog->zl_lock); in zil_close()
1805 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_close()
1806 ASSERT(!zilog_is_dirty(zilog)); in zil_close()
1808 taskq_destroy(zilog->zl_clean_taskq); in zil_close()
1809 zilog->zl_clean_taskq = NULL; in zil_close()
1810 zilog->zl_get_data = NULL; in zil_close()
1815 mutex_enter(&zilog->zl_lock); in zil_close()
1816 lwb = list_head(&zilog->zl_lwb_list); in zil_close()
1818 ASSERT(lwb == list_tail(&zilog->zl_lwb_list)); in zil_close()
1819 list_remove(&zilog->zl_lwb_list, lwb); in zil_close()
1823 mutex_exit(&zilog->zl_lock); in zil_close()
1854 zilog_t *zilog; in zil_suspend() local
1861 zilog = dmu_objset_zil(os); in zil_suspend()
1863 mutex_enter(&zilog->zl_lock); in zil_suspend()
1864 zh = zilog->zl_header; in zil_suspend()
1867 mutex_exit(&zilog->zl_lock); in zil_suspend()
1878 if (cookiep == NULL && !zilog->zl_suspending && in zil_suspend()
1879 (zilog->zl_suspend > 0 || BP_IS_HOLE(&zh->zh_log))) { in zil_suspend()
1880 mutex_exit(&zilog->zl_lock); in zil_suspend()
1888 zilog->zl_suspend++; in zil_suspend()
1890 if (zilog->zl_suspend > 1) { in zil_suspend()
1896 while (zilog->zl_suspending) in zil_suspend()
1897 cv_wait(&zilog->zl_cv_suspend, &zilog->zl_lock); in zil_suspend()
1898 mutex_exit(&zilog->zl_lock); in zil_suspend()
1916 mutex_exit(&zilog->zl_lock); in zil_suspend()
1920 zilog->zl_suspending = B_TRUE; in zil_suspend()
1921 mutex_exit(&zilog->zl_lock); in zil_suspend()
1923 zil_commit(zilog, 0); in zil_suspend()
1925 zil_destroy(zilog, B_FALSE); in zil_suspend()
1927 mutex_enter(&zilog->zl_lock); in zil_suspend()
1928 zilog->zl_suspending = B_FALSE; in zil_suspend()
1929 cv_broadcast(&zilog->zl_cv_suspend); in zil_suspend()
1930 mutex_exit(&zilog->zl_lock); in zil_suspend()
1943 zilog_t *zilog = dmu_objset_zil(os); in zil_resume() local
1945 mutex_enter(&zilog->zl_lock); in zil_resume()
1946 ASSERT(zilog->zl_suspend != 0); in zil_resume()
1947 zilog->zl_suspend--; in zil_resume()
1948 mutex_exit(&zilog->zl_lock); in zil_resume()
1961 zil_replay_error(zilog_t *zilog, lr_t *lr, int error) in zil_replay_error() argument
1965 zilog->zl_replaying_seq--; /* didn't actually replay this one */ in zil_replay_error()
1967 dmu_objset_name(zilog->zl_os, name); in zil_replay_error()
1979 zil_replay_log_record(zilog_t *zilog, lr_t *lr, void *zra, uint64_t claim_txg) in zil_replay_log_record() argument
1982 const zil_header_t *zh = zilog->zl_header; in zil_replay_log_record()
1987 zilog->zl_replaying_seq = lr->lrc_seq; in zil_replay_log_record()
1999 return (zil_replay_error(zilog, lr, EINVAL)); in zil_replay_log_record()
2006 error = dmu_object_info(zilog->zl_os, in zil_replay_log_record()
2021 error = zil_read_log_data(zilog, (lr_write_t *)lr, in zil_replay_log_record()
2024 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
2052 txg_wait_synced(spa_get_dsl(zilog->zl_spa), 0); in zil_replay_log_record()
2055 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
2062 zil_incr_blks(zilog_t *zilog, blkptr_t *bp, void *arg, uint64_t claim_txg) in zil_incr_blks() argument
2064 zilog->zl_replay_blks++; in zil_incr_blks()
2075 zilog_t *zilog = dmu_objset_zil(os); in zil_replay() local
2076 const zil_header_t *zh = zilog->zl_header; in zil_replay()
2080 zil_destroy(zilog, B_TRUE); in zil_replay()
2092 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_replay()
2094 zilog->zl_replay = B_TRUE; in zil_replay()
2095 zilog->zl_replay_time = ddi_get_lbolt(); in zil_replay()
2096 ASSERT(zilog->zl_replay_blks == 0); in zil_replay()
2097 (void) zil_parse(zilog, zil_incr_blks, zil_replay_log_record, &zr, in zil_replay()
2101 zil_destroy(zilog, B_FALSE); in zil_replay()
2102 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_replay()
2103 zilog->zl_replay = B_FALSE; in zil_replay()
2107 zil_replaying(zilog_t *zilog, dmu_tx_t *tx) in zil_replaying() argument
2109 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_replaying()
2112 if (zilog->zl_replay) { in zil_replaying()
2113 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_replaying()
2114 zilog->zl_replayed_seq[dmu_tx_get_txg(tx) & TXG_MASK] = in zil_replaying()
2115 zilog->zl_replaying_seq; in zil_replaying()