Lines Matching refs:zilog

147 static void zil_lwb_commit(zilog_t *zilog, lwb_t *lwb, itx_t *itx);
149 static uint64_t zil_max_waste_space(zilog_t *zilog);
165 zil_bp_tree_init(zilog_t *zilog) in zil_bp_tree_init() argument
167 avl_create(&zilog->zl_bp_tree, zil_bp_compare, in zil_bp_tree_init()
172 zil_bp_tree_fini(zilog_t *zilog) in zil_bp_tree_fini() argument
174 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_fini()
185 zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp) in zil_bp_tree_add() argument
187 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_add()
208 zil_header_in_syncing_context(zilog_t *zilog) in zil_header_in_syncing_context() argument
210 return ((zil_header_t *)zilog->zl_header); in zil_header_in_syncing_context()
214 zil_init_log_chain(zilog_t *zilog, blkptr_t *bp) in zil_init_log_chain() argument
222 zc->zc_word[ZIL_ZC_OBJSET] = dmu_objset_id(zilog->zl_os); in zil_init_log_chain()
245 zil_read_log_block(zilog_t *zilog, boolean_t decrypt, const blkptr_t *bp, in zil_read_log_block() argument
253 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_block()
256 if (!(zilog->zl_header->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) in zil_read_log_block()
265 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, in zil_read_log_block()
319 zil_read_log_data(zilog_t *zilog, const lr_write_t *lr, void *wbuf) in zil_read_log_data() argument
334 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_data()
346 SET_BOOKMARK(&zb, dmu_objset_id(zilog->zl_os), lr->lr_foid, in zil_read_log_data()
349 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, in zil_read_log_data()
460 zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, in zil_parse() argument
464 const zil_header_t *zh = zilog->zl_header; in zil_parse()
490 zil_bp_tree_init(zilog); in zil_parse()
501 error = parse_blk_func(zilog, &blk, arg, txg); in zil_parse()
511 error = zil_read_log_block(zilog, decrypt, &blk, &next_blk, in zil_parse()
519 dmu_objset_name(zilog->zl_os, name); in zil_parse()
555 error = parse_lr_func(zilog, lr, arg, txg); in zil_parse()
567 zilog->zl_parse_error = error; in zil_parse()
568 zilog->zl_parse_blk_seq = max_blk_seq; in zil_parse()
569 zilog->zl_parse_lr_seq = max_lr_seq; in zil_parse()
570 zilog->zl_parse_blk_count = blk_count; in zil_parse()
571 zilog->zl_parse_lr_count = lr_count; in zil_parse()
573 zil_bp_tree_fini(zilog); in zil_parse()
579 zil_clear_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_clear_log_block() argument
594 if (zil_bp_tree_add(zilog, bp) != 0) in zil_clear_log_block()
597 zio_free(zilog->zl_spa, first_txg, bp); in zil_clear_log_block()
602 zil_noop_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_noop_log_record() argument
605 (void) zilog, (void) lrc, (void) tx, (void) first_txg; in zil_noop_log_record()
610 zil_claim_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_claim_log_block() argument
618 zil_bp_tree_add(zilog, bp) != 0) in zil_claim_log_block()
621 return (zio_wait(zio_claim(NULL, zilog->zl_spa, in zil_claim_log_block()
627 zil_claim_write(zilog_t *zilog, const lr_t *lrc, void *tx, uint64_t first_txg) in zil_claim_write() argument
643 error = zil_read_log_data(zilog, lr, NULL); in zil_claim_write()
648 return (zil_claim_log_block(zilog, &lr->lr_blkptr, tx, first_txg)); in zil_claim_write()
652 zil_claim_clone_range(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_claim_clone_range() argument
657 spa_t *spa = zilog->zl_spa; in zil_claim_clone_range()
708 zil_claim_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_claim_log_record() argument
714 return (zil_claim_write(zilog, lrc, tx, first_txg)); in zil_claim_log_record()
716 return (zil_claim_clone_range(zilog, lrc, tx, first_txg)); in zil_claim_log_record()
723 zil_free_log_block(zilog_t *zilog, const blkptr_t *bp, void *tx, in zil_free_log_block() argument
728 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_block()
734 zil_free_write(zilog_t *zilog, const lr_t *lrc, void *tx, uint64_t claim_txg) in zil_free_write() argument
745 zil_bp_tree_add(zilog, bp) == 0 && !BP_IS_HOLE(bp)) { in zil_free_write()
746 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_write()
753 zil_free_clone_range(zilog_t *zilog, const lr_t *lrc, void *tx) in zil_free_clone_range() argument
768 spa = zilog->zl_spa; in zil_free_clone_range()
782 zil_free_log_record(zilog_t *zilog, const lr_t *lrc, void *tx, in zil_free_log_record() argument
792 return (zil_free_write(zilog, lrc, tx, claim_txg)); in zil_free_log_record()
794 return (zil_free_clone_range(zilog, lrc, tx)); in zil_free_log_record()
815 zil_alloc_lwb(zilog_t *zilog, int sz, blkptr_t *bp, boolean_t slog, in zil_alloc_lwb() argument
821 lwb->lwb_zilog = zilog; in zil_alloc_lwb()
828 lwb->lwb_slim = (spa_version(zilog->zl_spa) >= in zil_alloc_lwb()
851 mutex_enter(&zilog->zl_lock); in zil_alloc_lwb()
852 list_insert_tail(&zilog->zl_lwb_list, lwb); in zil_alloc_lwb()
854 zilog->zl_last_lwb_opened = lwb; in zil_alloc_lwb()
855 mutex_exit(&zilog->zl_lock); in zil_alloc_lwb()
861 zil_free_lwb(zilog_t *zilog, lwb_t *lwb) in zil_free_lwb() argument
863 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_free_lwb()
869 ASSERT3U(lwb->lwb_alloc_txg, <=, spa_syncing_txg(zilog->zl_spa)); in zil_free_lwb()
870 ASSERT3U(lwb->lwb_max_txg, <=, spa_syncing_txg(zilog->zl_spa)); in zil_free_lwb()
880 if (zilog->zl_last_lwb_opened == lwb) in zil_free_lwb()
881 zilog->zl_last_lwb_opened = NULL; in zil_free_lwb()
891 zilog_dirty(zilog_t *zilog, uint64_t txg) in zilog_dirty() argument
893 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_dirty()
894 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zilog_dirty()
896 ASSERT(spa_writeable(zilog->zl_spa)); in zilog_dirty()
901 if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) { in zilog_dirty()
903 dmu_buf_add_ref(ds->ds_dbuf, zilog); in zilog_dirty()
905 zilog->zl_dirty_max_txg = MAX(txg, zilog->zl_dirty_max_txg); in zilog_dirty()
917 zilog_is_dirty_in_txg(zilog_t *zilog, uint64_t txg) in zilog_is_dirty_in_txg() argument
919 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty_in_txg()
921 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, txg & TXG_MASK)) in zilog_is_dirty_in_txg()
931 zilog_is_dirty(zilog_t *zilog) in zilog_is_dirty() argument
933 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty()
936 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, t)) in zilog_is_dirty()
949 zil_commit_activate_saxattr_feature(zilog_t *zilog) in zil_commit_activate_saxattr_feature() argument
951 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_commit_activate_saxattr_feature()
955 if (spa_feature_is_enabled(zilog->zl_spa, SPA_FEATURE_ZILSAXATTR) && in zil_commit_activate_saxattr_feature()
956 dmu_objset_type(zilog->zl_os) != DMU_OST_ZVOL && in zil_commit_activate_saxattr_feature()
958 tx = dmu_tx_create(zilog->zl_os); in zil_commit_activate_saxattr_feature()
968 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_commit_activate_saxattr_feature()
976 zil_create(zilog_t *zilog) in zil_create() argument
978 const zil_header_t *zh = zilog->zl_header; in zil_create()
985 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_create()
991 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_create()
1004 tx = dmu_tx_create(zilog->zl_os); in zil_create()
1006 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_create()
1010 zio_free(zilog->zl_spa, txg, &blk); in zil_create()
1014 error = zio_alloc_zil(zilog->zl_spa, zilog->zl_os, txg, &blk, in zil_create()
1017 zil_init_log_chain(zilog, &blk); in zil_create()
1024 lwb = zil_alloc_lwb(zilog, 0, &blk, slog, txg, LWB_STATE_NEW); in zil_create()
1038 if (spa_feature_is_enabled(zilog->zl_spa, in zil_create()
1039 SPA_FEATURE_ZILSAXATTR) && dmu_objset_type(zilog->zl_os) != in zil_create()
1048 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_create()
1054 zil_commit_activate_saxattr_feature(zilog); in zil_create()
1056 IMPLY(spa_feature_is_enabled(zilog->zl_spa, SPA_FEATURE_ZILSAXATTR) && in zil_create()
1057 dmu_objset_type(zilog->zl_os) != DMU_OST_ZVOL, in zil_create()
1077 zil_destroy(zilog_t *zilog, boolean_t keep_first) in zil_destroy() argument
1079 const zil_header_t *zh = zilog->zl_header; in zil_destroy()
1087 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_destroy()
1089 zilog->zl_old_header = *zh; /* debugging aid */ in zil_destroy()
1094 tx = dmu_tx_create(zilog->zl_os); in zil_destroy()
1096 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_destroy()
1099 mutex_enter(&zilog->zl_lock); in zil_destroy()
1101 ASSERT3U(zilog->zl_destroy_txg, <, txg); in zil_destroy()
1102 zilog->zl_destroy_txg = txg; in zil_destroy()
1103 zilog->zl_keep_first = keep_first; in zil_destroy()
1105 if (!list_is_empty(&zilog->zl_lwb_list)) { in zil_destroy()
1108 while ((lwb = list_remove_head(&zilog->zl_lwb_list)) != NULL) { in zil_destroy()
1112 zio_free(zilog->zl_spa, txg, &lwb->lwb_blk); in zil_destroy()
1113 zil_free_lwb(zilog, lwb); in zil_destroy()
1116 zil_destroy_sync(zilog, tx); in zil_destroy()
1118 mutex_exit(&zilog->zl_lock); in zil_destroy()
1126 zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_destroy_sync() argument
1128 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_destroy_sync()
1129 (void) zil_parse(zilog, zil_free_log_block, in zil_destroy_sync()
1130 zil_free_log_record, tx, zilog->zl_header->zh_claim_txg, B_FALSE); in zil_destroy_sync()
1137 zilog_t *zilog; in zil_claim() local
1158 zilog = dmu_objset_zil(os); in zil_claim()
1159 zh = zil_header_in_syncing_context(zilog); in zil_claim()
1160 ASSERT3U(tx->tx_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
1161 first_txg = spa_min_claim_txg(zilog->zl_spa); in zil_claim()
1190 if (spa_get_log_state(zilog->zl_spa) == SPA_LOG_CLEAR || in zil_claim()
1191 (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_claim()
1194 (void) zil_parse(zilog, zil_clear_log_block, in zil_claim()
1209 ASSERT3U(first_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
1220 (void) zil_parse(zilog, zil_claim_log_block, in zil_claim()
1223 zh->zh_claim_blk_seq = zilog->zl_parse_blk_seq; in zil_claim()
1224 zh->zh_claim_lr_seq = zilog->zl_parse_lr_seq; in zil_claim()
1225 if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) in zil_claim()
1233 ASSERT3U(first_txg, ==, (spa_last_synced_txg(zilog->zl_spa) + 1)); in zil_claim()
1247 zilog_t *zilog; in zil_check_log_chain() local
1261 zilog = dmu_objset_zil(os); in zil_check_log_chain()
1262 bp = (blkptr_t *)&zilog->zl_header->zh_log; in zil_check_log_chain()
1291 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_check_log_chain()
1292 if (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_check_log_chain()
1304 error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, in zil_check_log_chain()
1305 zilog->zl_header->zh_claim_txg ? -1ULL : in zil_check_log_chain()
1456 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_flush_vdevs_done() local
1460 spa_config_exit(zilog->zl_spa, SCL_STATE, lwb); in zil_lwb_flush_vdevs_done()
1464 mutex_enter(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1466 zilog->zl_last_lwb_latency = (zilog->zl_last_lwb_latency * 7 + t) / 8; in zil_lwb_flush_vdevs_done()
1473 if (zilog->zl_last_lwb_opened == lwb) { in zil_lwb_flush_vdevs_done()
1480 zilog->zl_commit_lr_seq = zilog->zl_lr_seq; in zil_lwb_flush_vdevs_done()
1518 mutex_exit(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1520 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_vdevs_done()
1521 ASSERT3U(zilog->zl_lwb_inflight[txg & TXG_MASK], >, 0); in zil_lwb_flush_vdevs_done()
1522 zilog->zl_lwb_inflight[txg & TXG_MASK]--; in zil_lwb_flush_vdevs_done()
1523 if (zilog->zl_lwb_inflight[txg & TXG_MASK] == 0) in zil_lwb_flush_vdevs_done()
1524 cv_broadcast(&zilog->zl_lwb_io_cv); in zil_lwb_flush_vdevs_done()
1525 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_vdevs_done()
1533 zil_lwb_flush_wait_all(zilog_t *zilog, uint64_t txg) in zil_lwb_flush_wait_all() argument
1535 ASSERT3U(txg, ==, spa_syncing_txg(zilog->zl_spa)); in zil_lwb_flush_wait_all()
1537 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1538 while (zilog->zl_lwb_inflight[txg & TXG_MASK] > 0) in zil_lwb_flush_wait_all()
1539 cv_wait(&zilog->zl_lwb_io_cv, &zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1540 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1543 mutex_enter(&zilog->zl_lock); in zil_lwb_flush_wait_all()
1544 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1545 lwb_t *lwb = list_head(&zilog->zl_lwb_list); in zil_lwb_flush_wait_all()
1556 lwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_flush_wait_all()
1558 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_flush_wait_all()
1559 mutex_exit(&zilog->zl_lock); in zil_lwb_flush_wait_all()
1580 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_write_done() local
1592 mutex_enter(&zilog->zl_lock); in zil_lwb_write_done()
1604 nlwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_write_done()
1607 mutex_exit(&zilog->zl_lock); in zil_lwb_write_done()
1680 zil_lwb_set_zio_dependency(zilog_t *zilog, lwb_t *lwb) in zil_lwb_set_zio_dependency() argument
1682 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_lwb_set_zio_dependency()
1684 lwb_t *prev_lwb = list_prev(&zilog->zl_lwb_list, lwb); in zil_lwb_set_zio_dependency()
1726 zil_lwb_write_open(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_open() argument
1728 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_open()
1735 mutex_enter(&zilog->zl_lock); in zil_lwb_write_open()
1737 zilog->zl_last_lwb_opened = lwb; in zil_lwb_write_open()
1738 mutex_exit(&zilog->zl_lock); in zil_lwb_write_open()
1752 zil_lwb_plan(zilog_t *zilog, uint64_t size, uint_t *minsize) in zil_lwb_plan() argument
1754 uint_t md = zilog->zl_max_block_size - sizeof (zil_chain_t); in zil_lwb_plan()
1780 uint_t waste = zil_max_waste_space(zilog); in zil_lwb_plan()
1781 waste = MAX(waste, zilog->zl_cur_max); in zil_lwb_plan()
1798 zil_lwb_predict(zilog_t *zilog) in zil_lwb_predict() argument
1803 if (zilog->zl_cur_size > 0) { in zil_lwb_predict()
1804 o = zil_lwb_plan(zilog, zilog->zl_cur_size, &m); in zil_lwb_predict()
1812 o = MIN(o, zilog->zl_prev_opt[i]); in zil_lwb_predict()
1817 m = zilog->zl_prev_min[i]; in zil_lwb_predict()
1838 zil_lwb_write_close(zilog_t *zilog, lwb_t *lwb, lwb_state_t state) in zil_lwb_write_close() argument
1842 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_close()
1861 if (zilog->zl_cur_left > 0) { in zil_lwb_write_close()
1868 plan = zil_lwb_plan(zilog, zilog->zl_cur_left, &m); in zil_lwb_write_close()
1869 if (zilog->zl_parallel) { in zil_lwb_write_close()
1870 plan2 = zil_lwb_plan(zilog, zilog->zl_cur_left + in zil_lwb_write_close()
1871 zil_lwb_predict(zilog), &m); in zil_lwb_write_close()
1880 plan = zil_lwb_predict(zilog); in zil_lwb_write_close()
1884 blksz = MIN(blksz, zilog->zl_max_block_size); in zil_lwb_write_close()
1885 DTRACE_PROBE3(zil__block__size, zilog_t *, zilog, uint64_t, blksz, in zil_lwb_write_close()
1888 return (zil_alloc_lwb(zilog, blksz, NULL, 0, 0, state)); in zil_lwb_write_close()
1895 zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_issue() argument
1897 spa_t *spa = zilog->zl_spa; in zil_lwb_write_issue()
1909 zil_lwb_commit(zilog, lwb, itx); in zil_lwb_write_issue()
1923 mutex_enter(&zilog->zl_lock); in zil_lwb_write_issue()
1926 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
1929 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
1939 if (!lwb->lwb_slog || zilog->zl_cur_size <= zil_slog_bulk) in zil_lwb_write_issue()
1978 dmu_tx_t *tx = dmu_tx_create(zilog->zl_os); in zil_lwb_write_issue()
1980 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_lwb_write_issue()
1986 lwb_t *nlwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_write_issue()
1991 error = zio_alloc_zil(spa, zilog->zl_os, txg, bp, nlwb->lwb_sz, in zil_lwb_write_issue()
2006 mutex_enter(&zilog->zl_lwb_io_lock); in zil_lwb_write_issue()
2008 zilog->zl_lwb_inflight[txg & TXG_MASK]++; in zil_lwb_write_issue()
2009 zilog->zl_lwb_max_issued_txg = MAX(txg, zilog->zl_lwb_max_issued_txg); in zil_lwb_write_issue()
2010 mutex_exit(&zilog->zl_lwb_io_lock); in zil_lwb_write_issue()
2019 mutex_enter(&zilog->zl_lock); in zil_lwb_write_issue()
2020 zil_lwb_set_zio_dependency(zilog, lwb); in zil_lwb_write_issue()
2031 mutex_exit(&zilog->zl_lock); in zil_lwb_write_issue()
2034 ZIL_STAT_BUMP(zilog, zil_itx_metaslab_slog_count); in zil_lwb_write_issue()
2035 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_bytes, in zil_lwb_write_issue()
2037 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_write, in zil_lwb_write_issue()
2039 ZIL_STAT_INCR(zilog, zil_itx_metaslab_slog_alloc, in zil_lwb_write_issue()
2042 ZIL_STAT_BUMP(zilog, zil_itx_metaslab_normal_count); in zil_lwb_write_issue()
2043 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_bytes, in zil_lwb_write_issue()
2045 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_write, in zil_lwb_write_issue()
2047 ZIL_STAT_INCR(zilog, zil_itx_metaslab_normal_alloc, in zil_lwb_write_issue()
2069 zil_max_log_data(zilog_t *zilog, size_t hdrsize) in zil_max_log_data() argument
2071 return (zilog->zl_max_block_size - sizeof (zil_chain_t) - hdrsize); in zil_max_log_data()
2079 zil_max_waste_space(zilog_t *zilog) in zil_max_waste_space() argument
2081 return (zil_max_log_data(zilog, sizeof (lr_write_t)) / 16); in zil_max_waste_space()
2094 zil_max_copied_data(zilog_t *zilog) in zil_max_copied_data() argument
2096 uint64_t max_data = zil_max_log_data(zilog, sizeof (lr_write_t)); in zil_max_copied_data()
2143 zil_lwb_assign(zilog_t *zilog, lwb_t *lwb, itx_t *itx, list_t *ilwbs) in zil_lwb_assign() argument
2150 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_assign()
2154 zil_lwb_write_open(zilog, lwb); in zil_lwb_assign()
2179 ASSERT3U(reclen, <=, zil_max_log_data(zilog, 0)); in zil_lwb_assign()
2188 max_log_data = zil_max_log_data(zilog, sizeof (lr_write_t)); in zil_lwb_assign()
2190 lwb_sp < zil_max_waste_space(zilog) && in zil_lwb_assign()
2194 lwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_OPENED); in zil_lwb_assign()
2221 zilog->zl_cur_left -= dnow; in zil_lwb_assign()
2233 clr->lrc_seq = ++zilog->zl_lr_seq; in zil_lwb_assign()
2247 lr->lrc_txg > spa_freeze_txg(zilog->zl_spa)) in zil_lwb_assign()
2248 txg_wait_synced(zilog->zl_dmu_pool, lr->lrc_txg); in zil_lwb_assign()
2258 zil_lwb_commit(zilog_t *zilog, lwb_t *lwb, itx_t *itx) in zil_lwb_commit() argument
2280 ZIL_STAT_BUMP(zilog, zil_itx_count); in zil_lwb_commit()
2287 ZIL_STAT_BUMP(zilog, zil_itx_copied_count); in zil_lwb_commit()
2288 ZIL_STAT_INCR(zilog, zil_itx_copied_bytes, in zil_lwb_commit()
2297 ZIL_STAT_BUMP(zilog, zil_itx_needcopy_count); in zil_lwb_commit()
2298 ZIL_STAT_INCR(zilog, zil_itx_needcopy_bytes, in zil_lwb_commit()
2303 ZIL_STAT_BUMP(zilog, zil_itx_indirect_count); in zil_lwb_commit()
2304 ZIL_STAT_INCR(zilog, zil_itx_indirect_bytes, in zil_lwb_commit()
2308 zilog->zl_spa, NULL, NULL, NULL, in zil_lwb_commit()
2321 error = zilog->zl_get_data(itx->itx_private, in zil_lwb_commit()
2356 txg_wait_synced(zilog->zl_dmu_pool, in zil_lwb_commit()
2498 zil_remove_async(zilog_t *zilog, uint64_t oid) in zil_remove_async() argument
2510 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_remove_async()
2513 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_remove_async()
2516 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_remove_async()
2543 zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx) in zil_itx_assign() argument
2553 zil_async_to_sync(zilog, itx->itx_oid); in zil_itx_assign()
2555 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) in zil_itx_assign()
2560 itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_itx_assign()
2613 zilog_dirty(zilog, dmu_tx_get_txg(tx)); in zil_itx_assign()
2629 zil_clean(zilog_t *zilog, uint64_t synced_txg) in zil_clean() argument
2631 itxg_t *itxg = &zilog->zl_itxg[synced_txg & TXG_MASK]; in zil_clean()
2653 ASSERT3P(zilog->zl_dmu_pool, !=, NULL); in zil_clean()
2654 ASSERT3P(zilog->zl_dmu_pool->dp_zil_clean_taskq, !=, NULL); in zil_clean()
2655 taskqid_t id = taskq_dispatch(zilog->zl_dmu_pool->dp_zil_clean_taskq, in zil_clean()
2666 zil_get_commit_list(zilog_t *zilog) in zil_get_commit_list() argument
2669 list_t *commit_list = &zilog->zl_itx_commit_list; in zil_get_commit_list()
2671 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_get_commit_list()
2673 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_get_commit_list()
2676 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_get_commit_list()
2684 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_get_commit_list()
2700 ASSERT(zilog_is_dirty_in_txg(zilog, txg) || in zil_get_commit_list()
2701 spa_freeze_txg(zilog->zl_spa) != UINT64_MAX); in zil_get_commit_list()
2704 if (unlikely(zilog->zl_suspend > 0)) { in zil_get_commit_list()
2721 zilog->zl_cur_size += s; in zil_get_commit_list()
2722 zilog->zl_cur_left += s; in zil_get_commit_list()
2724 zilog->zl_cur_max = MAX(zilog->zl_cur_max, s); in zil_get_commit_list()
2735 zil_async_to_sync(zilog_t *zilog, uint64_t foid) in zil_async_to_sync() argument
2742 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_async_to_sync()
2745 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_async_to_sync()
2752 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_async_to_sync()
2798 zil_prune_commit_list(zilog_t *zilog) in zil_prune_commit_list() argument
2802 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_prune_commit_list()
2804 while ((itx = list_head(&zilog->zl_itx_commit_list)) != NULL) { in zil_prune_commit_list()
2809 mutex_enter(&zilog->zl_lock); in zil_prune_commit_list()
2811 lwb_t *last_lwb = zilog->zl_last_lwb_opened; in zil_prune_commit_list()
2825 mutex_exit(&zilog->zl_lock); in zil_prune_commit_list()
2827 list_remove(&zilog->zl_itx_commit_list, itx); in zil_prune_commit_list()
2835 zil_commit_writer_stall(zilog_t *zilog) in zil_commit_writer_stall() argument
2857 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_writer_stall()
2858 ZIL_STAT_BUMP(zilog, zil_commit_stall_count); in zil_commit_writer_stall()
2859 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_writer_stall()
2860 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_commit_writer_stall()
2864 zil_burst_done(zilog_t *zilog) in zil_burst_done() argument
2866 if (!list_is_empty(&zilog->zl_itx_commit_list) || in zil_burst_done()
2867 zilog->zl_cur_size == 0) in zil_burst_done()
2870 if (zilog->zl_parallel) in zil_burst_done()
2871 zilog->zl_parallel--; in zil_burst_done()
2873 uint_t r = (zilog->zl_prev_rotor + 1) & (ZIL_BURSTS - 1); in zil_burst_done()
2874 zilog->zl_prev_rotor = r; in zil_burst_done()
2875 zilog->zl_prev_opt[r] = zil_lwb_plan(zilog, zilog->zl_cur_size, in zil_burst_done()
2876 &zilog->zl_prev_min[r]); in zil_burst_done()
2878 zilog->zl_cur_size = 0; in zil_burst_done()
2879 zilog->zl_cur_max = 0; in zil_burst_done()
2880 zilog->zl_cur_left = 0; in zil_burst_done()
2890 zil_process_commit_list(zilog_t *zilog, zil_commit_waiter_t *zcw, list_t *ilwbs) in zil_process_commit_list() argument
2892 spa_t *spa = zilog->zl_spa; in zil_process_commit_list()
2898 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_process_commit_list()
2904 if (list_is_empty(&zilog->zl_itx_commit_list)) in zil_process_commit_list()
2911 lwb = list_tail(&zilog->zl_lwb_list); in zil_process_commit_list()
2913 lwb = zil_create(zilog); in zil_process_commit_list()
2919 zil_commit_activate_saxattr_feature(zilog); in zil_process_commit_list()
2932 zilog->zl_parallel = ZIL_BURSTS; in zil_process_commit_list()
2933 } else if ((plwb = list_prev(&zilog->zl_lwb_list, lwb)) in zil_process_commit_list()
2935 zilog->zl_parallel = MAX(zilog->zl_parallel, in zil_process_commit_list()
2940 while ((itx = list_remove_head(&zilog->zl_itx_commit_list)) != NULL) { in zil_process_commit_list()
2948 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
2951 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
3003 lwb = zil_lwb_assign(zilog, lwb, itx, ilwbs); in zil_process_commit_list()
3012 zilog->zl_parallel = ZIL_BURSTS; in zil_process_commit_list()
3013 zilog->zl_cur_left -= in zil_process_commit_list()
3024 zilog->zl_cur_left -= zil_itx_full_size(itx); in zil_process_commit_list()
3027 zilog->zl_cur_left -= zil_itx_full_size(itx); in zil_process_commit_list()
3040 zil_lwb_write_issue(zilog, lwb); in zil_process_commit_list()
3041 zil_commit_writer_stall(zilog); in zil_process_commit_list()
3109 if (lwb->lwb_state == LWB_STATE_OPENED && !zilog->zl_parallel) { in zil_process_commit_list()
3110 zil_burst_done(zilog); in zil_process_commit_list()
3112 lwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_NEW); in zil_process_commit_list()
3115 zil_lwb_write_issue(zilog, lwb); in zil_process_commit_list()
3116 zil_commit_writer_stall(zilog); in zil_process_commit_list()
3137 zil_commit_writer(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_writer() argument
3143 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_writer()
3144 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_writer()
3147 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_writer()
3169 ZIL_STAT_BUMP(zilog, zil_commit_writer_count); in zil_commit_writer()
3171 wtxg = zil_get_commit_list(zilog); in zil_commit_writer()
3172 zil_prune_commit_list(zilog); in zil_commit_writer()
3173 zil_process_commit_list(zilog, zcw, &ilwbs); in zil_commit_writer()
3176 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_writer()
3178 zil_lwb_write_issue(zilog, lwb); in zil_commit_writer()
3184 zil_commit_waiter_timeout(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter_timeout() argument
3186 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter_timeout()
3212 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3224 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3251 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3270 zil_burst_done(zilog); in zil_commit_waiter_timeout()
3271 lwb_t *nlwb = zil_lwb_write_close(zilog, lwb, LWB_STATE_NEW); in zil_commit_waiter_timeout()
3283 zil_lwb_write_issue(zilog, lwb); in zil_commit_waiter_timeout()
3284 zil_commit_writer_stall(zilog); in zil_commit_waiter_timeout()
3285 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3287 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
3288 zil_lwb_write_issue(zilog, lwb); in zil_commit_waiter_timeout()
3313 zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter() argument
3315 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_waiter()
3316 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter()
3317 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_waiter()
3328 hrtime_t sleep = (zilog->zl_last_lwb_latency * pct) / 100; in zil_commit_waiter()
3375 zil_commit_waiter_timeout(zilog, zcw); in zil_commit_waiter()
3448 zil_commit_itx_assign(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_itx_assign() argument
3450 dmu_tx_t *tx = dmu_tx_create(zilog->zl_os); in zil_commit_itx_assign()
3464 zil_itx_assign(zilog, itx, tx); in zil_commit_itx_assign()
3585 zil_commit(zilog_t *zilog, uint64_t foid) in zil_commit() argument
3600 ASSERT3B(dmu_objset_is_snapshot(zilog->zl_os), ==, B_FALSE); in zil_commit()
3602 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_commit()
3605 if (!spa_writeable(zilog->zl_spa)) { in zil_commit()
3613 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_commit()
3614 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_commit()
3616 ASSERT3P(zilog->zl_itxg[i].itxg_itxs, ==, NULL); in zil_commit()
3627 if (zilog->zl_suspend > 0) { in zil_commit()
3628 ZIL_STAT_BUMP(zilog, zil_commit_suspend_count); in zil_commit()
3629 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit()
3633 zil_commit_impl(zilog, foid); in zil_commit()
3637 zil_commit_impl(zilog_t *zilog, uint64_t foid) in zil_commit_impl() argument
3639 ZIL_STAT_BUMP(zilog, zil_commit_count); in zil_commit_impl()
3650 zil_async_to_sync(zilog, foid); in zil_commit_impl()
3668 zil_commit_itx_assign(zilog, zcw); in zil_commit_impl()
3670 uint64_t wtxg = zil_commit_writer(zilog, zcw); in zil_commit_impl()
3671 zil_commit_waiter(zilog, zcw); in zil_commit_impl()
3682 ZIL_STAT_BUMP(zilog, zil_commit_error_count); in zil_commit_impl()
3684 zilog_t *, zilog, zil_commit_waiter_t *, zcw); in zil_commit_impl()
3685 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_impl()
3687 ZIL_STAT_BUMP(zilog, zil_commit_suspend_count); in zil_commit_impl()
3688 txg_wait_synced(zilog->zl_dmu_pool, wtxg); in zil_commit_impl()
3698 zil_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_sync() argument
3700 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_sync()
3702 spa_t *spa = zilog->zl_spa; in zil_sync()
3703 uint64_t *replayed_seq = &zilog->zl_replayed_seq[txg & TXG_MASK]; in zil_sync()
3713 zil_lwb_flush_wait_all(zilog, txg); in zil_sync()
3715 mutex_enter(&zilog->zl_lock); in zil_sync()
3717 ASSERT(zilog->zl_stop_sync == 0); in zil_sync()
3725 if (zilog->zl_destroy_txg == txg) { in zil_sync()
3727 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zil_sync()
3729 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_sync()
3732 memset(zilog->zl_replayed_seq, 0, in zil_sync()
3733 sizeof (zilog->zl_replayed_seq)); in zil_sync()
3735 if (zilog->zl_keep_first) { in zil_sync()
3744 zil_init_log_chain(zilog, &blk); in zil_sync()
3759 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_sync()
3764 list_remove(&zilog->zl_lwb_list, lwb); in zil_sync()
3767 zil_free_lwb(zilog, lwb); in zil_sync()
3775 if (list_is_empty(&zilog->zl_lwb_list)) in zil_sync()
3779 mutex_exit(&zilog->zl_lock); in zil_sync()
3844 zil_set_sync(zilog_t *zilog, uint64_t sync) in zil_set_sync() argument
3846 zilog->zl_sync = sync; in zil_set_sync()
3850 zil_set_logbias(zilog_t *zilog, uint64_t logbias) in zil_set_logbias() argument
3852 zilog->zl_logbias = logbias; in zil_set_logbias()
3858 zilog_t *zilog; in zil_alloc() local
3860 zilog = kmem_zalloc(sizeof (zilog_t), KM_SLEEP); in zil_alloc()
3862 zilog->zl_header = zh_phys; in zil_alloc()
3863 zilog->zl_os = os; in zil_alloc()
3864 zilog->zl_spa = dmu_objset_spa(os); in zil_alloc()
3865 zilog->zl_dmu_pool = dmu_objset_pool(os); in zil_alloc()
3866 zilog->zl_destroy_txg = TXG_INITIAL - 1; in zil_alloc()
3867 zilog->zl_logbias = dmu_objset_logbias(os); in zil_alloc()
3868 zilog->zl_sync = dmu_objset_syncprop(os); in zil_alloc()
3869 zilog->zl_dirty_max_txg = 0; in zil_alloc()
3870 zilog->zl_last_lwb_opened = NULL; in zil_alloc()
3871 zilog->zl_last_lwb_latency = 0; in zil_alloc()
3872 zilog->zl_max_block_size = MIN(MAX(P2ALIGN_TYPED(zil_maxblocksize, in zil_alloc()
3876 mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3877 mutex_init(&zilog->zl_issuer_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3878 mutex_init(&zilog->zl_lwb_io_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
3881 mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, in zil_alloc()
3885 list_create(&zilog->zl_lwb_list, sizeof (lwb_t), in zil_alloc()
3888 list_create(&zilog->zl_itx_commit_list, sizeof (itx_t), in zil_alloc()
3891 cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); in zil_alloc()
3892 cv_init(&zilog->zl_lwb_io_cv, NULL, CV_DEFAULT, NULL); in zil_alloc()
3895 zilog->zl_prev_opt[i] = zilog->zl_max_block_size - in zil_alloc()
3899 return (zilog); in zil_alloc()
3903 zil_free(zilog_t *zilog) in zil_free() argument
3907 zilog->zl_stop_sync = 1; in zil_free()
3909 ASSERT0(zilog->zl_suspend); in zil_free()
3910 ASSERT0(zilog->zl_suspending); in zil_free()
3912 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_free()
3913 list_destroy(&zilog->zl_lwb_list); in zil_free()
3915 ASSERT(list_is_empty(&zilog->zl_itx_commit_list)); in zil_free()
3916 list_destroy(&zilog->zl_itx_commit_list); in zil_free()
3926 if (zilog->zl_itxg[i].itxg_itxs) in zil_free()
3927 zil_itxg_clean(zilog->zl_itxg[i].itxg_itxs); in zil_free()
3928 mutex_destroy(&zilog->zl_itxg[i].itxg_lock); in zil_free()
3931 mutex_destroy(&zilog->zl_issuer_lock); in zil_free()
3932 mutex_destroy(&zilog->zl_lock); in zil_free()
3933 mutex_destroy(&zilog->zl_lwb_io_lock); in zil_free()
3935 cv_destroy(&zilog->zl_cv_suspend); in zil_free()
3936 cv_destroy(&zilog->zl_lwb_io_cv); in zil_free()
3938 kmem_free(zilog, sizeof (zilog_t)); in zil_free()
3947 zilog_t *zilog = dmu_objset_zil(os); in zil_open() local
3949 ASSERT3P(zilog->zl_get_data, ==, NULL); in zil_open()
3950 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_open()
3951 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_open()
3953 zilog->zl_get_data = get_data; in zil_open()
3954 zilog->zl_sums = zil_sums; in zil_open()
3956 return (zilog); in zil_open()
3963 zil_close(zilog_t *zilog) in zil_close() argument
3968 if (!dmu_objset_is_snapshot(zilog->zl_os)) { in zil_close()
3969 zil_commit(zilog, 0); in zil_close()
3971 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_close()
3972 ASSERT0(zilog->zl_dirty_max_txg); in zil_close()
3973 ASSERT3B(zilog_is_dirty(zilog), ==, B_FALSE); in zil_close()
3976 mutex_enter(&zilog->zl_lock); in zil_close()
3977 txg = zilog->zl_dirty_max_txg; in zil_close()
3978 lwb = list_tail(&zilog->zl_lwb_list); in zil_close()
3983 mutex_exit(&zilog->zl_lock); in zil_close()
3990 mutex_enter(&zilog->zl_lwb_io_lock); in zil_close()
3991 txg = MAX(zilog->zl_lwb_max_issued_txg, txg); in zil_close()
3992 mutex_exit(&zilog->zl_lwb_io_lock); in zil_close()
4000 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_close()
4002 if (zilog_is_dirty(zilog)) in zil_close()
4003 zfs_dbgmsg("zil (%px) is dirty, txg %llu", zilog, in zil_close()
4005 if (txg < spa_freeze_txg(zilog->zl_spa)) in zil_close()
4006 VERIFY(!zilog_is_dirty(zilog)); in zil_close()
4008 zilog->zl_get_data = NULL; in zil_close()
4013 mutex_enter(&zilog->zl_lock); in zil_close()
4014 lwb = list_remove_head(&zilog->zl_lwb_list); in zil_close()
4016 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_close()
4019 zil_free_lwb(zilog, lwb); in zil_close()
4021 mutex_exit(&zilog->zl_lock); in zil_close()
4052 zilog_t *zilog; in zil_suspend() local
4059 zilog = dmu_objset_zil(os); in zil_suspend()
4061 mutex_enter(&zilog->zl_lock); in zil_suspend()
4062 zh = zilog->zl_header; in zil_suspend()
4065 mutex_exit(&zilog->zl_lock); in zil_suspend()
4076 if (cookiep == NULL && !zilog->zl_suspending && in zil_suspend()
4077 (zilog->zl_suspend > 0 || BP_IS_HOLE(&zh->zh_log))) { in zil_suspend()
4078 mutex_exit(&zilog->zl_lock); in zil_suspend()
4086 zilog->zl_suspend++; in zil_suspend()
4088 if (zilog->zl_suspend > 1) { in zil_suspend()
4094 while (zilog->zl_suspending) in zil_suspend()
4095 cv_wait(&zilog->zl_cv_suspend, &zilog->zl_lock); in zil_suspend()
4096 mutex_exit(&zilog->zl_lock); in zil_suspend()
4114 mutex_exit(&zilog->zl_lock); in zil_suspend()
4126 zilog->zl_suspend--; in zil_suspend()
4127 mutex_exit(&zilog->zl_lock); in zil_suspend()
4133 zilog->zl_suspending = B_TRUE; in zil_suspend()
4134 mutex_exit(&zilog->zl_lock); in zil_suspend()
4144 zil_commit_impl(zilog, 0); in zil_suspend()
4151 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_suspend()
4153 zil_destroy(zilog, B_FALSE); in zil_suspend()
4155 mutex_enter(&zilog->zl_lock); in zil_suspend()
4156 zilog->zl_suspending = B_FALSE; in zil_suspend()
4157 cv_broadcast(&zilog->zl_cv_suspend); in zil_suspend()
4158 mutex_exit(&zilog->zl_lock); in zil_suspend()
4174 zilog_t *zilog = dmu_objset_zil(os); in zil_resume() local
4176 mutex_enter(&zilog->zl_lock); in zil_resume()
4177 ASSERT(zilog->zl_suspend != 0); in zil_resume()
4178 zilog->zl_suspend--; in zil_resume()
4179 mutex_exit(&zilog->zl_lock); in zil_resume()
4192 zil_replay_error(zilog_t *zilog, const lr_t *lr, int error) in zil_replay_error() argument
4196 zilog->zl_replaying_seq--; /* didn't actually replay this one */ in zil_replay_error()
4198 dmu_objset_name(zilog->zl_os, name); in zil_replay_error()
4210 zil_replay_log_record(zilog_t *zilog, const lr_t *lr, void *zra, in zil_replay_log_record() argument
4214 const zil_header_t *zh = zilog->zl_header; in zil_replay_log_record()
4219 zilog->zl_replaying_seq = lr->lrc_seq; in zil_replay_log_record()
4231 return (zil_replay_error(zilog, lr, EINVAL)); in zil_replay_log_record()
4238 error = dmu_object_info(zilog->zl_os, in zil_replay_log_record()
4253 error = zil_read_log_data(zilog, (lr_write_t *)lr, in zil_replay_log_record()
4256 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
4284 txg_wait_synced(spa_get_dsl(zilog->zl_spa), 0); in zil_replay_log_record()
4287 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
4293 zil_incr_blks(zilog_t *zilog, const blkptr_t *bp, void *arg, uint64_t claim_txg) in zil_incr_blks() argument
4297 zilog->zl_replay_blks++; in zil_incr_blks()
4310 zilog_t *zilog = dmu_objset_zil(os); in zil_replay() local
4311 const zil_header_t *zh = zilog->zl_header; in zil_replay()
4315 return (zil_destroy(zilog, B_TRUE)); in zil_replay()
4326 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_replay()
4328 zilog->zl_replay = B_TRUE; in zil_replay()
4329 zilog->zl_replay_time = ddi_get_lbolt(); in zil_replay()
4330 ASSERT(zilog->zl_replay_blks == 0); in zil_replay()
4331 (void) zil_parse(zilog, zil_incr_blks, zil_replay_log_record, &zr, in zil_replay()
4335 zil_destroy(zilog, B_FALSE); in zil_replay()
4336 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_replay()
4337 zilog->zl_replay = B_FALSE; in zil_replay()
4343 zil_replaying(zilog_t *zilog, dmu_tx_t *tx) in zil_replaying() argument
4345 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_replaying()
4348 if (zilog->zl_replay) { in zil_replaying()
4349 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_replaying()
4350 zilog->zl_replayed_seq[dmu_tx_get_txg(tx) & TXG_MASK] = in zil_replaying()
4351 zilog->zl_replaying_seq; in zil_replaying()