Lines Matching refs:zilog

144 static void zil_lwb_commit(zilog_t *zilog, lwb_t *lwb, itx_t *itx);
146 static uint64_t zil_max_waste_space(zilog_t *zilog);
162 zil_bp_tree_init(zilog_t *zilog) in zil_bp_tree_init() argument
164 avl_create(&zilog->zl_bp_tree, zil_bp_compare, in zil_bp_tree_init()
169 zil_bp_tree_fini(zilog_t *zilog) in zil_bp_tree_fini() argument
171 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_fini()
182 zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp) in zil_bp_tree_add() argument
184 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_add()
205 zil_header_in_syncing_context(zilog_t *zilog) in zil_header_in_syncing_context() argument
207 return ((zil_header_t *)zilog->zl_header); in zil_header_in_syncing_context()
211 zil_init_log_chain(zilog_t *zilog, blkptr_t *bp) in zil_init_log_chain() argument
219 zc->zc_word[ZIL_ZC_OBJSET] = dmu_objset_id(zilog->zl_os); in zil_init_log_chain()
242 zil_read_log_block(zilog_t *zilog, boolean_t decrypt, const blkptr_t *bp, in zil_read_log_block() argument
250 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_block()
253 if (!(zilog->zl_header->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) in zil_read_log_block()
262 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, in zil_read_log_block()
316 zil_read_log_data(zilog_t *zilog, const lr_write_t *lr, void *wbuf) in zil_read_log_data() argument
331 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_data()
343 SET_BOOKMARK(&zb, dmu_objset_id(zilog->zl_os), lr->lr_foid, in zil_read_log_data()
346 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, in zil_read_log_data()
445 zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, in zil_parse() argument
449 const zil_header_t *zh = zilog->zl_header; in zil_parse()
475 zil_bp_tree_init(zilog); in zil_parse()
486 error = parse_blk_func(zilog, &blk, arg, txg); in zil_parse()
496 error = zil_read_log_block(zilog, decrypt, &blk, &next_blk, in zil_parse()
504 dmu_objset_name(zilog->zl_os, name); in zil_parse()
523 error = parse_lr_func(zilog, lr, arg, txg); in zil_parse()
535 zilog->zl_parse_error = error; in zil_parse()
536 zilog->zl_parse_blk_seq = max_blk_seq; in zil_parse()
537 zilog->zl_parse_lr_seq = max_lr_seq; in zil_parse()
538 zilog->zl_parse_blk_count = blk_count; in zil_parse()
539 zilog->zl_parse_lr_count = lr_count; in zil_parse()
541 zil_bp_tree_fini(zilog); in zil_parse()
547 zil_clear_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_clear_log_block() argument
562 if (zil_bp_tree_add(zilog, bp) != 0) in zil_clear_log_block()
565 zio_free(zilog->zl_spa, first_txg, bp); in zil_clear_log_block()
570 zil_noop_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_noop_log_record() argument
573 (void) zilog, (void) lrc, (void) tx, (void) first_txg; in zil_noop_log_record()
578 zil_claim_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_claim_log_block() argument
586 zil_bp_tree_add(zilog, bp) != 0) in zil_claim_log_block()
589 return (zio_wait(zio_claim(NULL, zilog->zl_spa, in zil_claim_log_block()
595 zil_claim_write(zilog_t *zilog, const lr_t *lrc, void *tx, uint64_t first_txg) in zil_claim_write() argument
611 error = zil_read_log_data(zilog, lr, NULL); in zil_claim_write()
616 return (zil_claim_log_block(zilog, &lr->lr_blkptr, tx, first_txg)); in zil_claim_write()
620 zil_claim_clone_range(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_claim_clone_range() argument
625 spa_t *spa = zilog->zl_spa; in zil_claim_clone_range()
676 zil_claim_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_claim_log_record() argument
682 return (zil_claim_write(zilog, lrc, tx, first_txg)); in zil_claim_log_record()
684 return (zil_claim_clone_range(zilog, lrc, tx, first_txg)); in zil_claim_log_record()
691 zil_free_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_free_log_block() argument
696 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_block()
702 zil_free_write(zilog_t *zilog, const lr_t *lrc, void *tx, uint64_t claim_txg) in zil_free_write() argument
713 zil_bp_tree_add(zilog, bp) == 0 && !BP_IS_HOLE(bp)) { in zil_free_write()
714 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_write()
721 zil_free_clone_range(zilog_t *zilog, const lr_t *lrc, void *tx) in zil_free_clone_range() argument
736 spa = zilog->zl_spa; in zil_free_clone_range()
750 zil_free_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_free_log_record() argument
760 return (zil_free_write(zilog, lrc, tx, claim_txg)); in zil_free_log_record()
762 return (zil_free_clone_range(zilog, lrc, tx)); in zil_free_log_record()
783 zil_alloc_lwb(zilog_t *zilog, int sz, blkptr_t *bp, boolean_t slog, in zil_alloc_lwb() argument
789 lwb->lwb_zilog = zilog; in zil_alloc_lwb()
796 lwb->lwb_slim = (spa_version(zilog->zl_spa) >= in zil_alloc_lwb()
819 mutex_enter(&zilog->zl_lock); in zil_alloc_lwb()
820 list_insert_tail(&zilog->zl_lwb_list, lwb); in zil_alloc_lwb()
822 zilog->zl_last_lwb_opened = lwb; in zil_alloc_lwb()
823 mutex_exit(&zilog->zl_lock); in zil_alloc_lwb()
829 zil_free_lwb(zilog_t *zilog, lwb_t *lwb) in zil_free_lwb() argument
831 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_free_lwb()
837 ASSERT3U(lwb->lwb_alloc_txg, <=, spa_syncing_txg(zilog->zl_spa)); in zil_free_lwb()
838 ASSERT3U(lwb->lwb_max_txg, <=, spa_syncing_txg(zilog->zl_spa)); in zil_free_lwb()
848 if (zilog->zl_last_lwb_opened == lwb) in zil_free_lwb()
849 zilog->zl_last_lwb_opened = NULL; in zil_free_lwb()
859 zilog_dirty(zilog_t *zilog, uint64_t txg) in zilog_dirty() argument
861 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_dirty()
862 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zilog_dirty()
864 ASSERT(spa_writeable(zilog->zl_spa)); in zilog_dirty()
869 if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) { in zilog_dirty()
871 dmu_buf_add_ref(ds->ds_dbuf, zilog); in zilog_dirty()
873 zilog->zl_dirty_max_txg = MAX(txg, zilog->zl_dirty_max_txg); in zilog_dirty()
885 zilog_is_dirty_in_txg(zilog_t *zilog, uint64_t txg) in zilog_is_dirty_in_txg() argument
887 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty_in_txg()
889 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, txg & TXG_MASK)) in zilog_is_dirty_in_txg()
899 zilog_is_dirty(zilog_t *zilog) in zilog_is_dirty() argument
901 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty()
904 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, t)) in zilog_is_dirty()
917 zil_commit_activate_saxattr_feature(zilog_t *zilog) in zil_commit_activate_saxattr_feature() argument
919 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_commit_activate_saxattr_feature()
923 if (spa_feature_is_enabled(zilog->zl_spa, SPA_FEATURE_ZILSAXATTR) && in zil_commit_activate_saxattr_feature()
924 dmu_objset_type(zilog->zl_os) != DMU_OST_ZVOL && in zil_commit_activate_saxattr_feature()
926 tx = dmu_tx_create(zilog->zl_os); in zil_commit_activate_saxattr_feature()
936 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_commit_activate_saxattr_feature()
944 zil_create(zilog_t *zilog) in zil_create() argument
946 const zil_header_t *zh = zilog->zl_header; in zil_create()
953 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_create()
959 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_create()
972 tx = dmu_tx_create(zilog->zl_os); in zil_create()
974 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_create()
978 zio_free(zilog->zl_spa, txg, &blk); in zil_create()
982 error = zio_alloc_zil(zilog->zl_spa, zilog->zl_os, txg, &blk, in zil_create()
985 zil_init_log_chain(zilog, &blk); in zil_create()
992 lwb = zil_alloc_lwb(zilog, 0, &blk, slog, txg, LWB_STATE_NEW); in zil_create()
1006 if (spa_feature_is_enabled(zilog->zl_spa, in zil_create()
1007 SPA_FEATURE_ZILSAXATTR) && dmu_objset_type(zilog->zl_os) != in zil_create()
1016 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_create()
1022 zil_commit_activate_saxattr_feature(zilog); in zil_create()
1024 IMPLY(spa_feature_is_enabled(zilog->zl_spa, SPA_FEATURE_ZILSAXATTR) && in zil_create()
1025 dmu_objset_type(zilog->zl_os) != DMU_OST_ZVOL, in zil_create()
1045 zil_destroy(zilog_t *zilog, boolean_t keep_first) in zil_destroy() argument
1047 const zil_header_t *zh = zilog->zl_header; in zil_destroy()
1055 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_destroy()
1057 zilog->zl_old_header = *zh; /* debugging aid */ in zil_destroy()
1062 tx = dmu_tx_create(zilog->zl_os); in zil_destroy()
1064 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_destroy()
1067 mutex_enter(&zilog->zl_lock); in zil_destroy()
1069 ASSERT3U(zilog->zl_destroy_txg, <, txg); in zil_destroy()
1070 zilog->zl_destroy_txg = txg; in zil_destroy()
1071 zilog->zl_keep_first = keep_first; in zil_destroy()
1073 if (!list_is_empty(&zilog->zl_lwb_list)) { in zil_destroy()
1076 while ((lwb = list_remove_head(&zilog->zl_lwb_list)) != NULL) { in zil_destroy()
1080 zio_free(zilog->zl_spa, txg, &lwb->lwb_blk); in zil_destroy()
1081 zil_free_lwb(zilog, lwb); in zil_destroy()
1084 zil_destroy_sync(zilog, tx); in zil_destroy()
1086 mutex_exit(&zilog->zl_lock); in zil_destroy()
1094 zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_destroy_sync() argument
1096 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_destroy_sync()
1097 (void) zil_parse(zilog, zil_free_log_block, in zil_destroy_sync()
1098 zil_free_log_record, tx, zilog->zl_header->zh_claim_txg, B_FALSE); in zil_destroy_sync()
1105 zilog_t *zilog; in zil_claim() local
1126 zilog = dmu_objset_zil(os); in zil_claim()
1127 zh = zil_header_in_syncing_context(zilog); in zil_claim()
1128 ASSERT3U(tx->tx_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
1129 first_txg = spa_min_claim_txg(zilog->zl_spa); in zil_claim()
1158 if (spa_get_log_state(zilog->zl_spa) == SPA_LOG_CLEAR || in zil_claim()
1159 (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_claim()
1162 (void) zil_parse(zilog, zil_clear_log_block, in zil_claim()
1177 ASSERT3U(first_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
1188 (void) zil_parse(zilog, zil_claim_log_block, in zil_claim()
1191 zh->zh_claim_blk_seq = zilog->zl_parse_blk_seq; in zil_claim()
1192 zh->zh_claim_lr_seq = zilog->zl_parse_lr_seq; in zil_claim()
1193 if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) in zil_claim()
1201 ASSERT3U(first_txg, ==, (spa_last_synced_txg(zilog->zl_spa) + 1)); in zil_claim()
1215 zilog_t *zilog; in zil_check_log_chain() local
1229 zilog = dmu_objset_zil(os); in zil_check_log_chain()
1230 bp = (blkptr_t *)&zilog->zl_header->zh_log; in zil_check_log_chain()
1259 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_check_log_chain()
1260 if (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_check_log_chain()
1272 error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, in zil_check_log_chain()
1273 zilog->zl_header->zh_claim_txg ? -1ULL : in zil_check_log_chain()
1424 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_flush_vdevs_done() local
1428 spa_config_exit(zilog->zl_spa, SCL_STATE, lwb); in zil_lwb_flush_vdevs_done()
1432 mutex_enter(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1434 zilog->zl_last_lwb_latency = (zilog->zl_last_lwb_latency * 7 + t) / 8; in zil_lwb_flush_vdevs_done()
1441 if (zilog->zl_last_lwb_opened == lwb) { in zil_lwb_flush_vdevs_done()
1448 zilog->zl_commit_lr_seq = zilog->zl_lr_seq; in zil_lwb_flush_vdevs_done()
1486 mutex_exit(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1488 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_vdevs_done()
1489 ASSERT3U(zilog->zl_lwb_inflight[txg & TXG_MASK], >, 0); in zil_lwb_flush_vdevs_done()
1490 zilog->zl_lwb_inflight[txg & TXG_MASK]--; in zil_lwb_flush_vdevs_done()
1491 if (zilog->zl_lwb_inflight[txg & TXG_MASK] == 0) in zil_lwb_flush_vdevs_done()
1492 cv_broadcast(&zilog->zl_lwb_io_cv); in zil_lwb_flush_vdevs_done()
1493 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_vdevs_done()
1501 zil_lwb_flush_wait_all(zilog_t *zilog, uint64_t txg) in zil_lwb_flush_wait_all() argument
1503 ASSERT3U(txg, ==, spa_syncing_txg(zilog->zl_spa)); in zil_lwb_flush_wait_all()
1505 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1506 while (zilog->zl_lwb_inflight[txg & TXG_MASK] > 0) in zil_lwb_flush_wait_all()
1507 cv_wait(&zilog->zl_lwb_io_cv, &zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1508 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1511 mutex_enter(&zilog->zl_lock); in zil_lwb_flush_wait_all()
1512 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1513 lwb_t *lwb = list_head(&zilog->zl_lwb_list); in zil_lwb_flush_wait_all()
1524 lwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_flush_wait_all()
1526 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1527 mutex_exit(&zilog->zl_lock); in zil_lwb_flush_wait_all()
1548 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_write_done() local
1560 mutex_enter(&zilog->zl_lock); in zil_lwb_write_done()
1572 nlwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_write_done()
1575 mutex_exit(&zilog->zl_lock); in zil_lwb_write_done()
1648 zil_lwb_set_zio_dependency(zilog_t *zilog, lwb_t *lwb) in zil_lwb_set_zio_dependency() argument
1650 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_lwb_set_zio_dependency()
1652 lwb_t *prev_lwb = list_prev(&zilog->zl_lwb_list, lwb); in zil_lwb_set_zio_dependency()
1694 zil_lwb_write_open(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_open() argument
1696 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_open()
1703 mutex_enter(&zilog->zl_lock); in zil_lwb_write_open()
1705 zilog->zl_last_lwb_opened = lwb; in zil_lwb_write_open()
1706 mutex_exit(&zilog->zl_lock); in zil_lwb_write_open()
1720 zil_lwb_plan(zilog_t *zilog, uint64_t size, uint_t *minsize) in zil_lwb_plan() argument
1722 uint_t md = zilog->zl_max_block_size - sizeof (zil_chain_t); in zil_lwb_plan()
1748 uint_t waste = zil_max_waste_space(zilog); in zil_lwb_plan()
1749 waste = MAX(waste, zilog->zl_cur_max); in zil_lwb_plan()
1766 zil_lwb_predict(zilog_t *zilog) in zil_lwb_predict() argument
1771 if (zilog->zl_cur_size > 0) { in zil_lwb_predict()
1772 o = zil_lwb_plan(zilog, zilog->zl_cur_size, &m); in zil_lwb_predict()
1780 o = MIN(o, zilog->zl_prev_opt[i]); in zil_lwb_predict()
1785 m = zilog->zl_prev_min[i]; in zil_lwb_predict()
1806 zil_lwb_write_close(zilog_t *zilog, lwb_t *lwb, lwb_state_t state) in zil_lwb_write_close() argument
1810 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_close()
1829 if (zilog->zl_cur_left > 0) { in zil_lwb_write_close()
1836 plan = zil_lwb_plan(zilog, zilog->zl_cur_left, &m); in zil_lwb_write_close()
1837 if (zilog->zl_parallel) { in zil_lwb_write_close()
1838 plan2 = zil_lwb_plan(zilog, zilog->zl_cur_left + in zil_lwb_write_close()
1839 zil_lwb_predict(zilog), &m); in zil_lwb_write_close()
1848 plan = zil_lwb_predict(zilog); in zil_lwb_write_close()
1852 blksz = MIN(blksz, zilog->zl_max_block_size); in zil_lwb_write_close()
1853 DTRACE_PROBE3(zil__block__size, zilog_t *, zilog, uint64_t, blksz, in zil_lwb_write_close()
1856 return (zil_alloc_lwb(zilog, blksz, NULL, 0, 0, state)); in zil_lwb_write_close()
1863 zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_issue() argument
1865 spa_t *spa = zilog->zl_spa; in zil_lwb_write_issue()
1877 zil_lwb_commit(zilog, lwb, itx); in zil_lwb_write_issue()
1891 mutex_enter(&zilog->zl_lock); in zil_lwb_write_issue()
1894 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
1897 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
1907 if (!lwb->lwb_slog || zilog->zl_cur_size <= zil_slog_bulk) in zil_lwb_write_issue()
1946 dmu_tx_t *tx = dmu_tx_create(zilog->zl_os); in zil_lwb_write_issue()
1948 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_lwb_write_issue()
1954 lwb_t *nlwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_write_issue()
1959 error = zio_alloc_zil(spa, zilog->zl_os, txg, bp, nlwb->lwb_sz, in zil_lwb_write_issue()
1974 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_write_issue()
1976 zilog->zl_lwb_inflight[txg & TXG_MASK]++; in zil_lwb_write_issue()
1977 zilog->zl_lwb_max_issued_txg = MAX(txg, zilog->zl_lwb_max_issued_txg); in zil_lwb_write_issue()
1978 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_write_issue()
1987 mutex_enter(&zilog->zl_lock); in zil_lwb_write_issue()
1988 zil_lwb_set_zio_dependency(zilog, lwb); in zil_lwb_write_issue()
1999 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
2002 ZIL_STAT_BUMP(zilog, zil_itx_metaslab_slog_count); in zil_lwb_write_issue()
2003 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_bytes, in zil_lwb_write_issue()
2005 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_write, in zil_lwb_write_issue()
2007 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_alloc, in zil_lwb_write_issue()
2010 ZIL_STAT_BUMP(zilog, zil_itx_metaslab_normal_count); in zil_lwb_write_issue()
2011 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_bytes, in zil_lwb_write_issue()
2013 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_write, in zil_lwb_write_issue()
2015 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_alloc, in zil_lwb_write_issue()
2037 zil_max_log_data(zilog_t *zilog, size_t hdrsize) in zil_max_log_data() argument
2039 return (zilog->zl_max_block_size - sizeof (zil_chain_t) - hdrsize); in zil_max_log_data()
2047 zil_max_waste_space(zilog_t *zilog) in zil_max_waste_space() argument
2049 return (zil_max_log_data(zilog, sizeof (lr_write_t)) / 16); in zil_max_waste_space()
2062 zil_max_copied_data(zilog_t *zilog) in zil_max_copied_data() argument
2064 uint64_t max_data = zil_max_log_data(zilog, sizeof (lr_write_t)); in zil_max_copied_data()
2111 zil_lwb_assign(zilog_t *zilog, lwb_t *lwb, itx_t *itx, list_t *ilwbs) in zil_lwb_assign() argument
2118 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_assign()
2122 zil_lwb_write_open(zilog, lwb); in zil_lwb_assign()
2147 ASSERT3U(reclen, <=, zil_max_log_data(zilog, 0)); in zil_lwb_assign()
2156 max_log_data = zil_max_log_data(zilog, sizeof (lr_write_t)); in zil_lwb_assign()
2158 lwb_sp < zil_max_waste_space(zilog) && in zil_lwb_assign()
2162 lwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_OPENED); in zil_lwb_assign()
2189 zilog->zl_cur_left -= dnow; in zil_lwb_assign()
2201 clr->lrc_seq = ++zilog->zl_lr_seq; in zil_lwb_assign()
2215 lr->lrc_txg > spa_freeze_txg(zilog->zl_spa)) in zil_lwb_assign()
2216 txg_wait_synced(zilog->zl_dmu_pool, lr->lrc_txg); in zil_lwb_assign()
2226 zil_lwb_commit(zilog_t *zilog, lwb_t *lwb, itx_t *itx) in zil_lwb_commit() argument
2248 ZIL_STAT_BUMP(zilog, zil_itx_count); in zil_lwb_commit()
2255 ZIL_STAT_BUMP(zilog, zil_itx_copied_count); in zil_lwb_commit()
2256 ZIL_STAT_INCR(zilog, zil_itx_copied_bytes, in zil_lwb_commit()
2265 ZIL_STAT_BUMP(zilog, zil_itx_needcopy_count); in zil_lwb_commit()
2266 ZIL_STAT_INCR(zilog, zil_itx_needcopy_bytes, in zil_lwb_commit()
2271 ZIL_STAT_BUMP(zilog, zil_itx_indirect_count); in zil_lwb_commit()
2272 ZIL_STAT_INCR(zilog, zil_itx_indirect_bytes, in zil_lwb_commit()
2276 zilog->zl_spa, NULL, NULL, NULL, in zil_lwb_commit()
2289 error = zilog->zl_get_data(itx->itx_private, in zil_lwb_commit()
2324 txg_wait_synced(zilog->zl_dmu_pool, in zil_lwb_commit()
2466 zil_remove_async(zilog_t *zilog, uint64_t oid) in zil_remove_async() argument
2478 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_remove_async()
2481 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_remove_async()
2484 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_remove_async()
2511 zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx) in zil_itx_assign() argument
2521 zil_async_to_sync(zilog, itx->itx_oid); in zil_itx_assign()
2523 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) in zil_itx_assign()
2528 itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_itx_assign()
2581 zilog_dirty(zilog, dmu_tx_get_txg(tx)); in zil_itx_assign()
2597 zil_clean(zilog_t *zilog, uint64_t synced_txg) in zil_clean() argument
2599 itxg_t *itxg = &zilog->zl_itxg[synced_txg & TXG_MASK]; in zil_clean()
2621 ASSERT3P(zilog->zl_dmu_pool, !=, NULL); in zil_clean()
2622 ASSERT3P(zilog->zl_dmu_pool->dp_zil_clean_taskq, !=, NULL); in zil_clean()
2623 taskqid_t id = taskq_dispatch(zilog->zl_dmu_pool->dp_zil_clean_taskq, in zil_clean()
2634 zil_get_commit_list(zilog_t *zilog) in zil_get_commit_list() argument
2637 list_t *commit_list = &zilog->zl_itx_commit_list; in zil_get_commit_list()
2639 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_get_commit_list()
2641 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_get_commit_list()
2644 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_get_commit_list()
2652 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_get_commit_list()
2668 ASSERT(zilog_is_dirty_in_txg(zilog, txg) || in zil_get_commit_list()
2669 spa_freeze_txg(zilog->zl_spa) != UINT64_MAX); in zil_get_commit_list()
2672 if (unlikely(zilog->zl_suspend > 0)) { in zil_get_commit_list()
2689 zilog->zl_cur_size += s; in zil_get_commit_list()
2690 zilog->zl_cur_left += s; in zil_get_commit_list()
2692 zilog->zl_cur_max = MAX(zilog->zl_cur_max, s); in zil_get_commit_list()
2703 zil_async_to_sync(zilog_t *zilog, uint64_t foid) in zil_async_to_sync() argument
2710 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_async_to_sync()
2713 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_async_to_sync()
2720 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_async_to_sync()
2766 zil_prune_commit_list(zilog_t *zilog) in zil_prune_commit_list() argument
2770 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_prune_commit_list()
2772 while ((itx = list_head(&zilog->zl_itx_commit_list)) != NULL) { in zil_prune_commit_list()
2777 mutex_enter(&zilog->zl_lock); in zil_prune_commit_list()
2779 lwb_t *last_lwb = zilog->zl_last_lwb_opened; in zil_prune_commit_list()
2793 mutex_exit(&zilog->zl_lock); in zil_prune_commit_list()
2795 list_remove(&zilog->zl_itx_commit_list, itx); in zil_prune_commit_list()
2803 zil_commit_writer_stall(zilog_t *zilog) in zil_commit_writer_stall() argument
2825 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_writer_stall()
2826 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_writer_stall()
2827 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_commit_writer_stall()
2831 zil_burst_done(zilog_t *zilog) in zil_burst_done() argument
2833 if (!list_is_empty(&zilog->zl_itx_commit_list) || in zil_burst_done()
2834 zilog->zl_cur_size == 0) in zil_burst_done()
2837 if (zilog->zl_parallel) in zil_burst_done()
2838 zilog->zl_parallel--; in zil_burst_done()
2840 uint_t r = (zilog->zl_prev_rotor + 1) & (ZIL_BURSTS - 1); in zil_burst_done()
2841 zilog->zl_prev_rotor = r; in zil_burst_done()
2842 zilog->zl_prev_opt[r] = zil_lwb_plan(zilog, zilog->zl_cur_size, in zil_burst_done()
2843 &zilog->zl_prev_min[r]); in zil_burst_done()
2845 zilog->zl_cur_size = 0; in zil_burst_done()
2846 zilog->zl_cur_max = 0; in zil_burst_done()
2847 zilog->zl_cur_left = 0; in zil_burst_done()
2857 zil_process_commit_list(zilog_t *zilog, zil_commit_waiter_t *zcw, list_t *ilwbs) in zil_process_commit_list() argument
2859 spa_t *spa = zilog->zl_spa; in zil_process_commit_list()
2865 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_process_commit_list()
2871 if (list_is_empty(&zilog->zl_itx_commit_list)) in zil_process_commit_list()
2878 lwb = list_tail(&zilog->zl_lwb_list); in zil_process_commit_list()
2880 lwb = zil_create(zilog); in zil_process_commit_list()
2886 zil_commit_activate_saxattr_feature(zilog); in zil_process_commit_list()
2899 zilog->zl_parallel = ZIL_BURSTS; in zil_process_commit_list()
2900 } else if ((plwb = list_prev(&zilog->zl_lwb_list, lwb)) in zil_process_commit_list()
2902 zilog->zl_parallel = MAX(zilog->zl_parallel, in zil_process_commit_list()
2907 while ((itx = list_remove_head(&zilog->zl_itx_commit_list)) != NULL) { in zil_process_commit_list()
2915 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
2918 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
2970 lwb = zil_lwb_assign(zilog, lwb, itx, ilwbs); in zil_process_commit_list()
2979 zilog->zl_parallel = ZIL_BURSTS; in zil_process_commit_list()
2980 zilog->zl_cur_left -= in zil_process_commit_list()
2991 zilog->zl_cur_left -= zil_itx_full_size(itx); in zil_process_commit_list()
2994 zilog->zl_cur_left -= zil_itx_full_size(itx); in zil_process_commit_list()
3007 zil_lwb_write_issue(zilog, lwb); in zil_process_commit_list()
3008 zil_commit_writer_stall(zilog); in zil_process_commit_list()
3076 if (lwb->lwb_state == LWB_STATE_OPENED && !zilog->zl_parallel) { in zil_process_commit_list()
3077 zil_burst_done(zilog); in zil_process_commit_list()
3079 lwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_NEW); in zil_process_commit_list()
3082 zil_lwb_write_issue(zilog, lwb); in zil_process_commit_list()
3083 zil_commit_writer_stall(zilog); in zil_process_commit_list()
3104 zil_commit_writer(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_writer() argument
3110 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_writer()
3111 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_writer()
3114 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_writer()
3136 ZIL_STAT_BUMP(zilog, zil_commit_writer_count); in zil_commit_writer()
3138 wtxg = zil_get_commit_list(zilog); in zil_commit_writer()
3139 zil_prune_commit_list(zilog); in zil_commit_writer()
3140 zil_process_commit_list(zilog, zcw, &ilwbs); in zil_commit_writer()
3143 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_writer()
3145 zil_lwb_write_issue(zilog, lwb); in zil_commit_writer()
3151 zil_commit_waiter_timeout(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter_timeout() argument
3153 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter_timeout()
3179 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3191 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3218 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3237 zil_burst_done(zilog); in zil_commit_waiter_timeout()
3238 lwb_t *nlwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_NEW); in zil_commit_waiter_timeout()
3250 zil_lwb_write_issue(zilog, lwb); in zil_commit_waiter_timeout()
3251 zil_commit_writer_stall(zilog); in zil_commit_waiter_timeout()
3252 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3254 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3255 zil_lwb_write_issue(zilog, lwb); in zil_commit_waiter_timeout()
3280 zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter() argument
3282 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_waiter()
3283 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter()
3284 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_waiter()
3295 hrtime_t sleep = (zilog->zl_last_lwb_latency * pct) / 100; in zil_commit_waiter()
3342 zil_commit_waiter_timeout(zilog, zcw); in zil_commit_waiter()
3415 zil_commit_itx_assign(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_itx_assign() argument
3417 dmu_tx_t *tx = dmu_tx_create(zilog->zl_os); in zil_commit_itx_assign()
3431 zil_itx_assign(zilog, itx, tx); in zil_commit_itx_assign()
3552 zil_commit(zilog_t *zilog, uint64_t foid) in zil_commit() argument
3567 ASSERT3B(dmu_objset_is_snapshot(zilog->zl_os), ==, B_FALSE); in zil_commit()
3569 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_commit()
3572 if (!spa_writeable(zilog->zl_spa)) { in zil_commit()
3580 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_commit()
3581 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_commit()
3583 ASSERT3P(zilog->zl_itxg[i].itxg_itxs, ==, NULL); in zil_commit()
3594 if (zilog->zl_suspend > 0) { in zil_commit()
3595 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit()
3599 zil_commit_impl(zilog, foid); in zil_commit()
3603 zil_commit_impl(zilog_t *zilog, uint64_t foid) in zil_commit_impl() argument
3605 ZIL_STAT_BUMP(zilog, zil_commit_count); in zil_commit_impl()
3616 zil_async_to_sync(zilog, foid); in zil_commit_impl()
3634 zil_commit_itx_assign(zilog, zcw); in zil_commit_impl()
3636 uint64_t wtxg = zil_commit_writer(zilog, zcw); in zil_commit_impl()
3637 zil_commit_waiter(zilog, zcw); in zil_commit_impl()
3649 zilog_t *, zilog, zil_commit_waiter_t *, zcw); in zil_commit_impl()
3650 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_impl()
3652 txg_wait_synced(zilog->zl_dmu_pool, wtxg); in zil_commit_impl()
3662 zil_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_sync() argument
3664 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_sync()
3666 spa_t *spa = zilog->zl_spa; in zil_sync()
3667 uint64_t *replayed_seq = &zilog->zl_replayed_seq[txg & TXG_MASK]; in zil_sync()
3677 zil_lwb_flush_wait_all(zilog, txg); in zil_sync()
3679 mutex_enter(&zilog->zl_lock); in zil_sync()
3681 ASSERT(zilog->zl_stop_sync == 0); in zil_sync()
3689 if (zilog->zl_destroy_txg == txg) { in zil_sync()
3691 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_sync()
3693 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_sync()
3696 memset(zilog->zl_replayed_seq, 0, in zil_sync()
3697 sizeof (zilog->zl_replayed_seq)); in zil_sync()
3699 if (zilog->zl_keep_first) { in zil_sync()
3708 zil_init_log_chain(zilog, &blk); in zil_sync()
3723 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_sync()
3728 list_remove(&zilog->zl_lwb_list, lwb); in zil_sync()
3731 zil_free_lwb(zilog, lwb); in zil_sync()
3739 if (list_is_empty(&zilog->zl_lwb_list)) in zil_sync()
3743 mutex_exit(&zilog->zl_lock); in zil_sync()
3808 zil_set_sync(zilog_t *zilog, uint64_t sync) in zil_set_sync() argument
3810 zilog->zl_sync = sync; in zil_set_sync()
3814 zil_set_logbias(zilog_t *zilog, uint64_t logbias) in zil_set_logbias() argument
3816 zilog->zl_logbias = logbias; in zil_set_logbias()
3822 zilog_t *zilog; in zil_alloc() local
3824 zilog = kmem_zalloc(sizeof (zilog_t), KM_SLEEP); in zil_alloc()
3826 zilog->zl_header = zh_phys; in zil_alloc()
3827 zilog->zl_os = os; in zil_alloc()
3828 zilog->zl_spa = dmu_objset_spa(os); in zil_alloc()
3829 zilog->zl_dmu_pool = dmu_objset_pool(os); in zil_alloc()
3830 zilog->zl_destroy_txg = TXG_INITIAL - 1; in zil_alloc()
3831 zilog->zl_logbias = dmu_objset_logbias(os); in zil_alloc()
3832 zilog->zl_sync = dmu_objset_syncprop(os); in zil_alloc()
3833 zilog->zl_dirty_max_txg = 0; in zil_alloc()
3834 zilog->zl_last_lwb_opened = NULL; in zil_alloc()
3835 zilog->zl_last_lwb_latency = 0; in zil_alloc()
3836 zilog->zl_max_block_size = MIN(MAX(P2ALIGN_TYPED(zil_maxblocksize, in zil_alloc()
3840 mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3841 mutex_init(&zilog->zl_issuer_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3842 mutex_init(&zilog->zl_lwb_io_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3845 mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, in zil_alloc()
3849 list_create(&zilog->zl_lwb_list, sizeof (lwb_t), in zil_alloc()
3852 list_create(&zilog->zl_itx_commit_list, sizeof (itx_t), in zil_alloc()
3855 cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); in zil_alloc()
3856 cv_init(&zilog->zl_lwb_io_cv, NULL, CV_DEFAULT, NULL); in zil_alloc()
3859 zilog->zl_prev_opt[i] = zilog->zl_max_block_size - in zil_alloc()
3863 return (zilog); in zil_alloc()
3867 zil_free(zilog_t *zilog) in zil_free() argument
3871 zilog->zl_stop_sync = 1; in zil_free()
3873 ASSERT0(zilog->zl_suspend); in zil_free()
3874 ASSERT0(zilog->zl_suspending); in zil_free()
3876 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_free()
3877 list_destroy(&zilog->zl_lwb_list); in zil_free()
3879 ASSERT(list_is_empty(&zilog->zl_itx_commit_list)); in zil_free()
3880 list_destroy(&zilog->zl_itx_commit_list); in zil_free()
3890 if (zilog->zl_itxg[i].itxg_itxs) in zil_free()
3891 zil_itxg_clean(zilog->zl_itxg[i].itxg_itxs); in zil_free()
3892 mutex_destroy(&zilog->zl_itxg[i].itxg_lock); in zil_free()
3895 mutex_destroy(&zilog->zl_issuer_lock); in zil_free()
3896 mutex_destroy(&zilog->zl_lock); in zil_free()
3897 mutex_destroy(&zilog->zl_lwb_io_lock); in zil_free()
3899 cv_destroy(&zilog->zl_cv_suspend); in zil_free()
3900 cv_destroy(&zilog->zl_lwb_io_cv); in zil_free()
3902 kmem_free(zilog, sizeof (zilog_t)); in zil_free()
3911 zilog_t *zilog = dmu_objset_zil(os); in zil_open() local
3913 ASSERT3P(zilog->zl_get_data, ==, NULL); in zil_open()
3914 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_open()
3915 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_open()
3917 zilog->zl_get_data = get_data; in zil_open()
3918 zilog->zl_sums = zil_sums; in zil_open()
3920 return (zilog); in zil_open()
3927 zil_close(zilog_t *zilog) in zil_close() argument
3932 if (!dmu_objset_is_snapshot(zilog->zl_os)) { in zil_close()
3933 zil_commit(zilog, 0); in zil_close()
3935 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_close()
3936 ASSERT0(zilog->zl_dirty_max_txg); in zil_close()
3937 ASSERT3B(zilog_is_dirty(zilog), ==, B_FALSE); in zil_close()
3940 mutex_enter(&zilog->zl_lock); in zil_close()
3941 txg = zilog->zl_dirty_max_txg; in zil_close()
3942 lwb = list_tail(&zilog->zl_lwb_list); in zil_close()
3947 mutex_exit(&zilog->zl_lock); in zil_close()
3954 mutex_enter(&zilog->zl_lwb_io_lock); in zil_close()
3955 txg = MAX(zilog->zl_lwb_max_issued_txg, txg); in zil_close()
3956 mutex_exit(&zilog->zl_lwb_io_lock); in zil_close()
3964 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_close()
3966 if (zilog_is_dirty(zilog)) in zil_close()
3967 zfs_dbgmsg("zil (%px) is dirty, txg %llu", zilog, in zil_close()
3969 if (txg < spa_freeze_txg(zilog->zl_spa)) in zil_close()
3970 VERIFY(!zilog_is_dirty(zilog)); in zil_close()
3972 zilog->zl_get_data = NULL; in zil_close()
3977 mutex_enter(&zilog->zl_lock); in zil_close()
3978 lwb = list_remove_head(&zilog->zl_lwb_list); in zil_close()
3980 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_close()
3983 zil_free_lwb(zilog, lwb); in zil_close()
3985 mutex_exit(&zilog->zl_lock); in zil_close()
4016 zilog_t *zilog; in zil_suspend() local
4023 zilog = dmu_objset_zil(os); in zil_suspend()
4025 mutex_enter(&zilog->zl_lock); in zil_suspend()
4026 zh = zilog->zl_header; in zil_suspend()
4029 mutex_exit(&zilog->zl_lock); in zil_suspend()
4040 if (cookiep == NULL && !zilog->zl_suspending && in zil_suspend()
4041 (zilog->zl_suspend > 0 || BP_IS_HOLE(&zh->zh_log))) { in zil_suspend()
4042 mutex_exit(&zilog->zl_lock); in zil_suspend()
4050 zilog->zl_suspend++; in zil_suspend()
4052 if (zilog->zl_suspend > 1) { in zil_suspend()
4058 while (zilog->zl_suspending) in zil_suspend()
4059 cv_wait(&zilog->zl_cv_suspend, &zilog->zl_lock); in zil_suspend()
4060 mutex_exit(&zilog->zl_lock); in zil_suspend()
4078 mutex_exit(&zilog->zl_lock); in zil_suspend()
4090 zilog->zl_suspend--; in zil_suspend()
4091 mutex_exit(&zilog->zl_lock); in zil_suspend()
4097 zilog->zl_suspending = B_TRUE; in zil_suspend()
4098 mutex_exit(&zilog->zl_lock); in zil_suspend()
4108 zil_commit_impl(zilog, 0); in zil_suspend()
4115 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_suspend()
4117 zil_destroy(zilog, B_FALSE); in zil_suspend()
4119 mutex_enter(&zilog->zl_lock); in zil_suspend()
4120 zilog->zl_suspending = B_FALSE; in zil_suspend()
4121 cv_broadcast(&zilog->zl_cv_suspend); in zil_suspend()
4122 mutex_exit(&zilog->zl_lock); in zil_suspend()
4138 zilog_t *zilog = dmu_objset_zil(os); in zil_resume() local
4140 mutex_enter(&zilog->zl_lock); in zil_resume()
4141 ASSERT(zilog->zl_suspend != 0); in zil_resume()
4142 zilog->zl_suspend--; in zil_resume()
4143 mutex_exit(&zilog->zl_lock); in zil_resume()
4156 zil_replay_error(zilog_t *zilog, const lr_t *lr, int error) in zil_replay_error() argument
4160 zilog->zl_replaying_seq--; /* didn't actually replay this one */ in zil_replay_error()
4162 dmu_objset_name(zilog->zl_os, name); in zil_replay_error()
4174 zil_replay_log_record(zilog_t *zilog, const lr_t *lr, void *zra, in zil_replay_log_record() argument
4178 const zil_header_t *zh = zilog->zl_header; in zil_replay_log_record()
4183 zilog->zl_replaying_seq = lr->lrc_seq; in zil_replay_log_record()
4195 return (zil_replay_error(zilog, lr, EINVAL)); in zil_replay_log_record()
4202 error = dmu_object_info(zilog->zl_os, in zil_replay_log_record()
4217 error = zil_read_log_data(zilog, (lr_write_t *)lr, in zil_replay_log_record()
4220 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
4248 txg_wait_synced(spa_get_dsl(zilog->zl_spa), 0); in zil_replay_log_record()
4251 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
4257 zil_incr_blks(zilog_t *zilog, const blkptr_t *bp, void *arg, uint64_t claim_txg) in zil_incr_blks() argument
4261 zilog->zl_replay_blks++; in zil_incr_blks()
4274 zilog_t *zilog = dmu_objset_zil(os); in zil_replay() local
4275 const zil_header_t *zh = zilog->zl_header; in zil_replay()
4279 return (zil_destroy(zilog, B_TRUE)); in zil_replay()
4290 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_replay()
4292 zilog->zl_replay = B_TRUE; in zil_replay()
4293 zilog->zl_replay_time = ddi_get_lbolt(); in zil_replay()
4294 ASSERT(zilog->zl_replay_blks == 0); in zil_replay()
4295 (void) zil_parse(zilog, zil_incr_blks, zil_replay_log_record, &zr, in zil_replay()
4299 zil_destroy(zilog, B_FALSE); in zil_replay()
4300 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_replay()
4301 zilog->zl_replay = B_FALSE; in zil_replay()
4307 zil_replaying(zilog_t *zilog, dmu_tx_t *tx) in zil_replaying() argument
4309 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_replaying()
4312 if (zilog->zl_replay) { in zil_replaying()
4313 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_replaying()
4314 zilog->zl_replayed_seq[dmu_tx_get_txg(tx) & TXG_MASK] = in zil_replaying()
4315 zilog->zl_replaying_seq; in zil_replaying()