Lines Matching refs:zilog

115 static void zil_async_to_sync(zilog_t *zilog, uint64_t foid);
134 zil_bp_tree_init(zilog_t *zilog) in zil_bp_tree_init() argument
136 avl_create(&zilog->zl_bp_tree, zil_bp_compare, in zil_bp_tree_init()
141 zil_bp_tree_fini(zilog_t *zilog) in zil_bp_tree_fini() argument
143 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_fini()
154 zil_bp_tree_add(zilog_t *zilog, const blkptr_t *bp) in zil_bp_tree_add() argument
156 avl_tree_t *t = &zilog->zl_bp_tree; in zil_bp_tree_add()
177 zil_header_in_syncing_context(zilog_t *zilog) in zil_header_in_syncing_context() argument
179 return ((zil_header_t *)zilog->zl_header); in zil_header_in_syncing_context()
183 zil_init_log_chain(zilog_t *zilog, blkptr_t *bp) in zil_init_log_chain() argument
189 zc->zc_word[ZIL_ZC_OBJSET] = dmu_objset_id(zilog->zl_os); in zil_init_log_chain()
197 zil_read_log_block(zilog_t *zilog, boolean_t decrypt, const blkptr_t *bp, in zil_read_log_block() argument
206 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_block()
209 if (!(zilog->zl_header->zh_flags & ZIL_CLAIM_LR_SEQ_VALID)) in zil_read_log_block()
218 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, in zil_read_log_block()
276 zil_read_log_data(zilog_t *zilog, const lr_write_t *lr, void *wbuf) in zil_read_log_data() argument
291 if (zilog->zl_header->zh_claim_txg == 0) in zil_read_log_data()
302 SET_BOOKMARK(&zb, dmu_objset_id(zilog->zl_os), lr->lr_foid, in zil_read_log_data()
305 error = arc_read(NULL, zilog->zl_spa, bp, arc_getbuf_func, &abuf, in zil_read_log_data()
321 zil_parse(zilog_t *zilog, zil_parse_blk_func_t *parse_blk_func, in zil_parse() argument
325 const zil_header_t *zh = zilog->zl_header; in zil_parse()
353 zil_bp_tree_init(zilog); in zil_parse()
363 error = parse_blk_func(zilog, &blk, arg, txg); in zil_parse()
373 error = zil_read_log_block(zilog, decrypt, &blk, &next_blk, in zil_parse()
385 error = parse_lr_func(zilog, lr, arg, txg); in zil_parse()
394 zilog->zl_parse_error = error; in zil_parse()
395 zilog->zl_parse_blk_seq = max_blk_seq; in zil_parse()
396 zilog->zl_parse_lr_seq = max_lr_seq; in zil_parse()
397 zilog->zl_parse_blk_count = blk_count; in zil_parse()
398 zilog->zl_parse_lr_count = lr_count; in zil_parse()
404 zil_bp_tree_fini(zilog); in zil_parse()
412 zil_clear_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t first_txg) in zil_clear_log_block() argument
425 if (zil_bp_tree_add(zilog, bp) != 0) in zil_clear_log_block()
428 zio_free(zilog->zl_spa, first_txg, bp); in zil_clear_log_block()
434 zil_noop_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t first_txg) in zil_noop_log_record() argument
440 zil_claim_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t first_txg) in zil_claim_log_block() argument
447 zil_bp_tree_add(zilog, bp) != 0) in zil_claim_log_block()
450 return (zio_wait(zio_claim(NULL, zilog->zl_spa, in zil_claim_log_block()
456 zil_claim_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t first_txg) in zil_claim_log_record() argument
473 error = zil_read_log_data(zilog, lr, NULL); in zil_claim_log_record()
478 return (zil_claim_log_block(zilog, &lr->lr_blkptr, tx, first_txg)); in zil_claim_log_record()
483 zil_free_log_block(zilog_t *zilog, blkptr_t *bp, void *tx, uint64_t claim_txg) in zil_free_log_block() argument
485 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_block()
491 zil_free_log_record(zilog_t *zilog, lr_t *lrc, void *tx, uint64_t claim_txg) in zil_free_log_record() argument
500 bp->blk_birth >= claim_txg && zil_bp_tree_add(zilog, bp) == 0 && in zil_free_log_record()
502 zio_free(zilog->zl_spa, dmu_tx_get_txg(tx), bp); in zil_free_log_record()
517 zil_alloc_lwb(zilog_t *zilog, blkptr_t *bp, boolean_t slog, uint64_t txg) in zil_alloc_lwb() argument
522 lwb->lwb_zilog = zilog; in zil_alloc_lwb()
540 mutex_enter(&zilog->zl_lock); in zil_alloc_lwb()
541 list_insert_tail(&zilog->zl_lwb_list, lwb); in zil_alloc_lwb()
542 mutex_exit(&zilog->zl_lock); in zil_alloc_lwb()
552 zil_free_lwb(zilog_t *zilog, lwb_t *lwb) in zil_free_lwb() argument
554 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_free_lwb()
560 ASSERT3U(lwb->lwb_max_txg, <=, spa_syncing_txg(zilog->zl_spa)); in zil_free_lwb()
568 if (zilog->zl_last_lwb_opened == lwb) in zil_free_lwb()
569 zilog->zl_last_lwb_opened = NULL; in zil_free_lwb()
579 zilog_dirty(zilog_t *zilog, uint64_t txg) in zilog_dirty() argument
581 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_dirty()
582 dsl_dataset_t *ds = dmu_objset_ds(zilog->zl_os); in zilog_dirty()
584 ASSERT(spa_writeable(zilog->zl_spa)); in zilog_dirty()
589 if (txg_list_add(&dp->dp_dirty_zilogs, zilog, txg)) { in zilog_dirty()
591 dmu_buf_add_ref(ds->ds_dbuf, zilog); in zilog_dirty()
593 zilog->zl_dirty_max_txg = MAX(txg, zilog->zl_dirty_max_txg); in zilog_dirty()
605 zilog_is_dirty_in_txg(zilog_t *zilog, uint64_t txg) in zilog_is_dirty_in_txg() argument
607 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty_in_txg()
609 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, txg & TXG_MASK)) in zilog_is_dirty_in_txg()
619 zilog_is_dirty(zilog_t *zilog) in zilog_is_dirty() argument
621 dsl_pool_t *dp = zilog->zl_dmu_pool; in zilog_is_dirty()
624 if (txg_list_member(&dp->dp_dirty_zilogs, zilog, t)) in zilog_is_dirty()
634 zil_create(zilog_t *zilog) in zil_create() argument
636 const zil_header_t *zh = zilog->zl_header; in zil_create()
647 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_create()
660 tx = dmu_tx_create(zilog->zl_os); in zil_create()
662 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_create()
666 zio_free(zilog->zl_spa, txg, &blk); in zil_create()
670 error = zio_alloc_zil(zilog->zl_spa, zilog->zl_os, txg, &blk, in zil_create()
674 zil_init_log_chain(zilog, &blk); in zil_create()
681 lwb = zil_alloc_lwb(zilog, &blk, slog, txg); in zil_create()
690 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_create()
708 zil_destroy(zilog_t *zilog, boolean_t keep_first) in zil_destroy() argument
710 const zil_header_t *zh = zilog->zl_header; in zil_destroy()
718 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_destroy()
720 zilog->zl_old_header = *zh; /* debugging aid */ in zil_destroy()
725 tx = dmu_tx_create(zilog->zl_os); in zil_destroy()
727 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_destroy()
730 mutex_enter(&zilog->zl_lock); in zil_destroy()
732 ASSERT3U(zilog->zl_destroy_txg, <, txg); in zil_destroy()
733 zilog->zl_destroy_txg = txg; in zil_destroy()
734 zilog->zl_keep_first = keep_first; in zil_destroy()
736 if (!list_is_empty(&zilog->zl_lwb_list)) { in zil_destroy()
739 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_destroy()
740 list_remove(&zilog->zl_lwb_list, lwb); in zil_destroy()
743 zio_free(zilog->zl_spa, txg, &lwb->lwb_blk); in zil_destroy()
744 zil_free_lwb(zilog, lwb); in zil_destroy()
747 zil_destroy_sync(zilog, tx); in zil_destroy()
749 mutex_exit(&zilog->zl_lock); in zil_destroy()
755 zil_destroy_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_destroy_sync() argument
757 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_destroy_sync()
758 (void) zil_parse(zilog, zil_free_log_block, in zil_destroy_sync()
759 zil_free_log_record, tx, zilog->zl_header->zh_claim_txg, B_FALSE); in zil_destroy_sync()
766 zilog_t *zilog; in zil_claim() local
786 zilog = dmu_objset_zil(os); in zil_claim()
787 zh = zil_header_in_syncing_context(zilog); in zil_claim()
788 ASSERT3U(tx->tx_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
789 first_txg = spa_min_claim_txg(zilog->zl_spa); in zil_claim()
818 if (spa_get_log_state(zilog->zl_spa) == SPA_LOG_CLEAR || in zil_claim()
819 (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_claim()
822 (void) zil_parse(zilog, zil_clear_log_block, in zil_claim()
837 ASSERT3U(first_txg, ==, spa_first_txg(zilog->zl_spa)); in zil_claim()
848 (void) zil_parse(zilog, zil_claim_log_block, in zil_claim()
851 zh->zh_claim_blk_seq = zilog->zl_parse_blk_seq; in zil_claim()
852 zh->zh_claim_lr_seq = zilog->zl_parse_lr_seq; in zil_claim()
853 if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) in zil_claim()
861 ASSERT3U(first_txg, ==, (spa_last_synced_txg(zilog->zl_spa) + 1)); in zil_claim()
875 zilog_t *zilog; in zil_check_log_chain() local
889 zilog = dmu_objset_zil(os); in zil_check_log_chain()
890 bp = (blkptr_t *)&zilog->zl_header->zh_log; in zil_check_log_chain()
919 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_check_log_chain()
920 if (zilog->zl_spa->spa_uberblock.ub_checkpoint_txg != 0 && in zil_check_log_chain()
932 error = zil_parse(zilog, zil_claim_log_block, zil_claim_log_record, tx, in zil_check_log_chain()
933 zilog->zl_header->zh_claim_txg ? -1ULL : in zil_check_log_chain()
1085 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_flush_vdevs_done() local
1089 spa_config_exit(zilog->zl_spa, SCL_STATE, lwb); in zil_lwb_flush_vdevs_done()
1093 mutex_enter(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1107 zilog->zl_last_lwb_latency = gethrtime() - lwb->lwb_issued_timestamp; in zil_lwb_flush_vdevs_done()
1114 if (zilog->zl_last_lwb_opened == lwb) { in zil_lwb_flush_vdevs_done()
1121 zilog->zl_commit_lr_seq = zilog->zl_lr_seq; in zil_lwb_flush_vdevs_done()
1142 mutex_exit(&zilog->zl_lock); in zil_lwb_flush_vdevs_done()
1170 zilog_t *zilog = lwb->lwb_zilog; in zil_lwb_write_done() local
1188 mutex_enter(&zilog->zl_lock); in zil_lwb_write_done()
1192 nlwb = list_next(&zilog->zl_lwb_list, lwb); in zil_lwb_write_done()
1193 mutex_exit(&zilog->zl_lock); in zil_lwb_write_done()
1241 zil_lwb_set_zio_dependency(zilog_t *zilog, lwb_t *lwb) in zil_lwb_set_zio_dependency() argument
1243 lwb_t *last_lwb_opened = zilog->zl_last_lwb_opened; in zil_lwb_set_zio_dependency()
1245 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_set_zio_dependency()
1246 ASSERT(MUTEX_HELD(&zilog->zl_lock)); in zil_lwb_set_zio_dependency()
1315 zil_lwb_write_open(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_open() argument
1320 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_open()
1333 if (!lwb->lwb_slog || zilog->zl_cur_used <= zil_slog_bulk) in zil_lwb_write_open()
1338 lwb->lwb_root_zio = zio_root(zilog->zl_spa, in zil_lwb_write_open()
1343 zilog->zl_spa, 0, &lwb->lwb_blk, lwb_abd, in zil_lwb_write_open()
1350 mutex_enter(&zilog->zl_lock); in zil_lwb_write_open()
1351 zil_lwb_set_zio_dependency(zilog, lwb); in zil_lwb_write_open()
1352 zilog->zl_last_lwb_opened = lwb; in zil_lwb_write_open()
1353 mutex_exit(&zilog->zl_lock); in zil_lwb_write_open()
1380 zil_lwb_write_issue(zilog_t *zilog, lwb_t *lwb) in zil_lwb_write_issue() argument
1384 spa_t *spa = zilog->zl_spa; in zil_lwb_write_issue()
1392 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_write_issue()
1417 tx = dmu_tx_create(zilog->zl_os); in zil_lwb_write_issue()
1427 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_lwb_write_issue()
1448 zil_blksz = zilog->zl_cur_used + sizeof (zil_chain_t); in zil_lwb_write_issue()
1454 zilog->zl_prev_blks[zilog->zl_prev_rotor] = zil_blksz; in zil_lwb_write_issue()
1456 zil_blksz = MAX(zil_blksz, zilog->zl_prev_blks[i]); in zil_lwb_write_issue()
1457 zilog->zl_prev_rotor = (zilog->zl_prev_rotor + 1) & (ZIL_PREV_BLKS - 1); in zil_lwb_write_issue()
1462 error = zio_alloc_zil(spa, zilog->zl_os, txg, bp, &lwb->lwb_blk, in zil_lwb_write_issue()
1473 nlwb = zil_alloc_lwb(zilog, bp, slog, txg); in zil_lwb_write_issue()
1495 spa_config_enter(zilog->zl_spa, SCL_STATE, lwb, RW_READER); in zil_lwb_write_issue()
1512 zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb) in zil_lwb_commit() argument
1519 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_lwb_commit()
1523 zil_lwb_write_open(zilog, lwb); in zil_lwb_commit()
1541 mutex_enter(&zilog->zl_lock); in zil_lwb_commit()
1544 mutex_exit(&zilog->zl_lock); in zil_lwb_commit()
1555 zilog->zl_cur_used += (reclen + dlen); in zil_lwb_commit()
1558 ASSERT3U(zilog->zl_cur_used, <, UINT64_MAX - (reclen + dlen)); in zil_lwb_commit()
1569 lwb = zil_lwb_write_issue(zilog, lwb); in zil_lwb_commit()
1572 zil_lwb_write_open(zilog, lwb); in zil_lwb_commit()
1588 if (txg > spa_freeze_txg(zilog->zl_spa)) in zil_lwb_commit()
1589 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_lwb_commit()
1621 error = zilog->zl_get_data(itx->itx_private, in zil_lwb_commit()
1625 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_lwb_commit()
1642 lrcb->lrc_seq = ++zilog->zl_lr_seq; in zil_lwb_commit()
1652 zilog->zl_cur_used += reclen; in zil_lwb_commit()
1753 zil_remove_async(zilog_t *zilog, uint64_t oid) in zil_remove_async() argument
1765 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_remove_async()
1768 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_remove_async()
1771 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_remove_async()
1798 zil_itx_assign(zilog_t *zilog, itx_t *itx, dmu_tx_t *tx) in zil_itx_assign() argument
1808 zil_async_to_sync(zilog, itx->itx_oid); in zil_itx_assign()
1810 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) in zil_itx_assign()
1815 itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_itx_assign()
1866 zilog_dirty(zilog, dmu_tx_get_txg(tx)); in zil_itx_assign()
1882 zil_clean(zilog_t *zilog, uint64_t synced_txg) in zil_clean() argument
1884 itxg_t *itxg = &zilog->zl_itxg[synced_txg & TXG_MASK]; in zil_clean()
1906 ASSERT3P(zilog->zl_dmu_pool, !=, NULL); in zil_clean()
1907 ASSERT3P(zilog->zl_dmu_pool->dp_zil_clean_taskq, !=, NULL); in zil_clean()
1908 if (taskq_dispatch(zilog->zl_dmu_pool->dp_zil_clean_taskq, in zil_clean()
1919 zil_get_commit_list(zilog_t *zilog) in zil_get_commit_list() argument
1922 list_t *commit_list = &zilog->zl_itx_commit_list; in zil_get_commit_list()
1924 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_get_commit_list()
1926 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_get_commit_list()
1929 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_get_commit_list()
1937 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_get_commit_list()
1953 ASSERT(zilog_is_dirty_in_txg(zilog, txg) || in zil_get_commit_list()
1954 spa_freeze_txg(zilog->zl_spa) != UINT64_MAX); in zil_get_commit_list()
1965 zil_async_to_sync(zilog_t *zilog, uint64_t foid) in zil_async_to_sync() argument
1972 if (spa_freeze_txg(zilog->zl_spa) != UINT64_MAX) /* ziltest support */ in zil_async_to_sync()
1975 otxg = spa_last_synced_txg(zilog->zl_spa) + 1; in zil_async_to_sync()
1982 itxg_t *itxg = &zilog->zl_itxg[txg & TXG_MASK]; in zil_async_to_sync()
2027 zil_prune_commit_list(zilog_t *zilog) in zil_prune_commit_list() argument
2031 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_prune_commit_list()
2033 while (itx = list_head(&zilog->zl_itx_commit_list)) { in zil_prune_commit_list()
2038 mutex_enter(&zilog->zl_lock); in zil_prune_commit_list()
2040 lwb_t *last_lwb = zilog->zl_last_lwb_opened; in zil_prune_commit_list()
2055 mutex_exit(&zilog->zl_lock); in zil_prune_commit_list()
2057 list_remove(&zilog->zl_itx_commit_list, itx); in zil_prune_commit_list()
2065 zil_commit_writer_stall(zilog_t *zilog) in zil_commit_writer_stall() argument
2087 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_writer_stall()
2088 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_writer_stall()
2089 ASSERT3P(list_tail(&zilog->zl_lwb_list), ==, NULL); in zil_commit_writer_stall()
2099 zil_process_commit_list(zilog_t *zilog) in zil_process_commit_list() argument
2101 spa_t *spa = zilog->zl_spa; in zil_process_commit_list()
2106 ASSERT(MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_process_commit_list()
2112 if (list_head(&zilog->zl_itx_commit_list) == NULL) in zil_process_commit_list()
2118 lwb = list_tail(&zilog->zl_lwb_list); in zil_process_commit_list()
2120 lwb = zil_create(zilog); in zil_process_commit_list()
2127 while (itx = list_head(&zilog->zl_itx_commit_list)) { in zil_process_commit_list()
2135 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
2138 zilog_t *, zilog, itx_t *, itx); in zil_process_commit_list()
2190 lwb = zil_lwb_commit(zilog, itx, lwb); in zil_process_commit_list()
2198 list_remove(&zilog->zl_itx_commit_list, itx); in zil_process_commit_list()
2209 zil_commit_writer_stall(zilog); in zil_process_commit_list()
2294 zil_commit_writer(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_writer() argument
2296 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_writer()
2297 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_writer()
2299 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_writer()
2321 zil_get_commit_list(zilog); in zil_commit_writer()
2322 zil_prune_commit_list(zilog); in zil_commit_writer()
2323 zil_process_commit_list(zilog); in zil_commit_writer()
2326 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_writer()
2330 zil_commit_waiter_timeout(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter_timeout() argument
2332 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter_timeout()
2360 mutex_enter(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
2409 lwb_t *nlwb = zil_lwb_write_issue(zilog, lwb); in zil_commit_waiter_timeout()
2425 zilog->zl_cur_used = 0; in zil_commit_waiter_timeout()
2451 zil_commit_writer_stall(zilog); in zil_commit_waiter_timeout()
2456 mutex_exit(&zilog->zl_issuer_lock); in zil_commit_waiter_timeout()
2480 zil_commit_waiter(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_waiter() argument
2482 ASSERT(!MUTEX_HELD(&zilog->zl_lock)); in zil_commit_waiter()
2483 ASSERT(!MUTEX_HELD(&zilog->zl_issuer_lock)); in zil_commit_waiter()
2484 ASSERT(spa_writeable(zilog->zl_spa)); in zil_commit_waiter()
2495 hrtime_t sleep = (zilog->zl_last_lwb_latency * pct) / 100; in zil_commit_waiter()
2542 zil_commit_waiter_timeout(zilog, zcw); in zil_commit_waiter()
2613 zil_commit_itx_assign(zilog_t *zilog, zil_commit_waiter_t *zcw) in zil_commit_itx_assign() argument
2615 dmu_tx_t *tx = dmu_tx_create(zilog->zl_os); in zil_commit_itx_assign()
2622 zil_itx_assign(zilog, itx, tx); in zil_commit_itx_assign()
2743 zil_commit(zilog_t *zilog, uint64_t foid) in zil_commit() argument
2758 ASSERT3B(dmu_objset_is_snapshot(zilog->zl_os), ==, B_FALSE); in zil_commit()
2760 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_commit()
2763 if (!spa_writeable(zilog->zl_spa)) { in zil_commit()
2771 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_commit()
2772 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_commit()
2774 ASSERT3P(zilog->zl_itxg[i].itxg_itxs, ==, NULL); in zil_commit()
2785 if (zilog->zl_suspend > 0) { in zil_commit()
2786 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit()
2790 zil_commit_impl(zilog, foid); in zil_commit()
2794 zil_commit_impl(zilog_t *zilog, uint64_t foid) in zil_commit_impl() argument
2805 zil_async_to_sync(zilog, foid); in zil_commit_impl()
2823 zil_commit_itx_assign(zilog, zcw); in zil_commit_impl()
2825 zil_commit_writer(zilog, zcw); in zil_commit_impl()
2826 zil_commit_waiter(zilog, zcw); in zil_commit_impl()
2838 zilog_t *, zilog, zil_commit_waiter_t *, zcw); in zil_commit_impl()
2839 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_commit_impl()
2849 zil_sync(zilog_t *zilog, dmu_tx_t *tx) in zil_sync() argument
2851 zil_header_t *zh = zil_header_in_syncing_context(zilog); in zil_sync()
2853 spa_t *spa = zilog->zl_spa; in zil_sync()
2854 uint64_t *replayed_seq = &zilog->zl_replayed_seq[txg & TXG_MASK]; in zil_sync()
2864 mutex_enter(&zilog->zl_lock); in zil_sync()
2866 ASSERT(zilog->zl_stop_sync == 0); in zil_sync()
2874 if (zilog->zl_destroy_txg == txg) { in zil_sync()
2877 ASSERT(list_head(&zilog->zl_lwb_list) == NULL); in zil_sync()
2880 bzero(zilog->zl_replayed_seq, sizeof (zilog->zl_replayed_seq)); in zil_sync()
2882 if (zilog->zl_keep_first) { in zil_sync()
2891 zil_init_log_chain(zilog, &blk); in zil_sync()
2896 while ((lwb = list_head(&zilog->zl_lwb_list)) != NULL) { in zil_sync()
2900 list_remove(&zilog->zl_lwb_list, lwb); in zil_sync()
2902 zil_free_lwb(zilog, lwb); in zil_sync()
2910 if (list_head(&zilog->zl_lwb_list) == NULL) in zil_sync()
2913 mutex_exit(&zilog->zl_lock); in zil_sync()
2957 zil_set_sync(zilog_t *zilog, uint64_t sync) in zil_set_sync() argument
2959 zilog->zl_sync = sync; in zil_set_sync()
2963 zil_set_logbias(zilog_t *zilog, uint64_t logbias) in zil_set_logbias() argument
2965 zilog->zl_logbias = logbias; in zil_set_logbias()
2971 zilog_t *zilog; in zil_alloc() local
2973 zilog = kmem_zalloc(sizeof (zilog_t), KM_SLEEP); in zil_alloc()
2975 zilog->zl_header = zh_phys; in zil_alloc()
2976 zilog->zl_os = os; in zil_alloc()
2977 zilog->zl_spa = dmu_objset_spa(os); in zil_alloc()
2978 zilog->zl_dmu_pool = dmu_objset_pool(os); in zil_alloc()
2979 zilog->zl_destroy_txg = TXG_INITIAL - 1; in zil_alloc()
2980 zilog->zl_logbias = dmu_objset_logbias(os); in zil_alloc()
2981 zilog->zl_sync = dmu_objset_syncprop(os); in zil_alloc()
2982 zilog->zl_dirty_max_txg = 0; in zil_alloc()
2983 zilog->zl_last_lwb_opened = NULL; in zil_alloc()
2984 zilog->zl_last_lwb_latency = 0; in zil_alloc()
2986 mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
2987 mutex_init(&zilog->zl_issuer_lock, NULL, MUTEX_DEFAULT, NULL); in zil_alloc()
2990 mutex_init(&zilog->zl_itxg[i].itxg_lock, NULL, in zil_alloc()
2994 list_create(&zilog->zl_lwb_list, sizeof (lwb_t), in zil_alloc()
2997 list_create(&zilog->zl_itx_commit_list, sizeof (itx_t), in zil_alloc()
3000 cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); in zil_alloc()
3002 return (zilog); in zil_alloc()
3006 zil_free(zilog_t *zilog) in zil_free() argument
3008 zilog->zl_stop_sync = 1; in zil_free()
3010 ASSERT0(zilog->zl_suspend); in zil_free()
3011 ASSERT0(zilog->zl_suspending); in zil_free()
3013 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_free()
3014 list_destroy(&zilog->zl_lwb_list); in zil_free()
3016 ASSERT(list_is_empty(&zilog->zl_itx_commit_list)); in zil_free()
3017 list_destroy(&zilog->zl_itx_commit_list); in zil_free()
3027 if (zilog->zl_itxg[i].itxg_itxs) in zil_free()
3028 zil_itxg_clean(zilog->zl_itxg[i].itxg_itxs); in zil_free()
3029 mutex_destroy(&zilog->zl_itxg[i].itxg_lock); in zil_free()
3032 mutex_destroy(&zilog->zl_issuer_lock); in zil_free()
3033 mutex_destroy(&zilog->zl_lock); in zil_free()
3035 cv_destroy(&zilog->zl_cv_suspend); in zil_free()
3037 kmem_free(zilog, sizeof (zilog_t)); in zil_free()
3046 zilog_t *zilog = dmu_objset_zil(os); in zil_open() local
3048 ASSERT3P(zilog->zl_get_data, ==, NULL); in zil_open()
3049 ASSERT3P(zilog->zl_last_lwb_opened, ==, NULL); in zil_open()
3050 ASSERT(list_is_empty(&zilog->zl_lwb_list)); in zil_open()
3052 zilog->zl_get_data = get_data; in zil_open()
3054 return (zilog); in zil_open()
3061 zil_close(zilog_t *zilog) in zil_close() argument
3066 if (!dmu_objset_is_snapshot(zilog->zl_os)) { in zil_close()
3067 zil_commit(zilog, 0); in zil_close()
3069 ASSERT3P(list_tail(&zilog->zl_lwb_list), ==, NULL); in zil_close()
3070 ASSERT0(zilog->zl_dirty_max_txg); in zil_close()
3071 ASSERT3B(zilog_is_dirty(zilog), ==, B_FALSE); in zil_close()
3074 mutex_enter(&zilog->zl_lock); in zil_close()
3075 lwb = list_tail(&zilog->zl_lwb_list); in zil_close()
3077 txg = zilog->zl_dirty_max_txg; in zil_close()
3079 txg = MAX(zilog->zl_dirty_max_txg, lwb->lwb_max_txg); in zil_close()
3080 mutex_exit(&zilog->zl_lock); in zil_close()
3088 txg_wait_synced(zilog->zl_dmu_pool, txg); in zil_close()
3090 if (zilog_is_dirty(zilog)) in zil_close()
3091 zfs_dbgmsg("zil (%p) is dirty, txg %llu", zilog, txg); in zil_close()
3092 if (txg < spa_freeze_txg(zilog->zl_spa)) in zil_close()
3093 VERIFY(!zilog_is_dirty(zilog)); in zil_close()
3095 zilog->zl_get_data = NULL; in zil_close()
3100 mutex_enter(&zilog->zl_lock); in zil_close()
3101 lwb = list_head(&zilog->zl_lwb_list); in zil_close()
3103 ASSERT3P(lwb, ==, list_tail(&zilog->zl_lwb_list)); in zil_close()
3105 list_remove(&zilog->zl_lwb_list, lwb); in zil_close()
3107 zil_free_lwb(zilog, lwb); in zil_close()
3109 mutex_exit(&zilog->zl_lock); in zil_close()
3140 zilog_t *zilog; in zil_suspend() local
3147 zilog = dmu_objset_zil(os); in zil_suspend()
3149 mutex_enter(&zilog->zl_lock); in zil_suspend()
3150 zh = zilog->zl_header; in zil_suspend()
3153 mutex_exit(&zilog->zl_lock); in zil_suspend()
3164 if (cookiep == NULL && !zilog->zl_suspending && in zil_suspend()
3165 (zilog->zl_suspend > 0 || BP_IS_HOLE(&zh->zh_log))) { in zil_suspend()
3166 mutex_exit(&zilog->zl_lock); in zil_suspend()
3174 zilog->zl_suspend++; in zil_suspend()
3176 if (zilog->zl_suspend > 1) { in zil_suspend()
3182 while (zilog->zl_suspending) in zil_suspend()
3183 cv_wait(&zilog->zl_cv_suspend, &zilog->zl_lock); in zil_suspend()
3184 mutex_exit(&zilog->zl_lock); in zil_suspend()
3202 mutex_exit(&zilog->zl_lock); in zil_suspend()
3214 zilog->zl_suspend--; in zil_suspend()
3215 mutex_exit(&zilog->zl_lock); in zil_suspend()
3221 zilog->zl_suspending = B_TRUE; in zil_suspend()
3222 mutex_exit(&zilog->zl_lock); in zil_suspend()
3232 zil_commit_impl(zilog, 0); in zil_suspend()
3240 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_suspend()
3242 zil_destroy(zilog, B_FALSE); in zil_suspend()
3244 mutex_enter(&zilog->zl_lock); in zil_suspend()
3245 zilog->zl_suspending = B_FALSE; in zil_suspend()
3246 cv_broadcast(&zilog->zl_cv_suspend); in zil_suspend()
3247 mutex_exit(&zilog->zl_lock); in zil_suspend()
3263 zilog_t *zilog = dmu_objset_zil(os); in zil_resume() local
3265 mutex_enter(&zilog->zl_lock); in zil_resume()
3266 ASSERT(zilog->zl_suspend != 0); in zil_resume()
3267 zilog->zl_suspend--; in zil_resume()
3268 mutex_exit(&zilog->zl_lock); in zil_resume()
3281 zil_replay_error(zilog_t *zilog, lr_t *lr, int error) in zil_replay_error() argument
3285 zilog->zl_replaying_seq--; /* didn't actually replay this one */ in zil_replay_error()
3287 dmu_objset_name(zilog->zl_os, name); in zil_replay_error()
3299 zil_replay_log_record(zilog_t *zilog, lr_t *lr, void *zra, uint64_t claim_txg) in zil_replay_log_record() argument
3302 const zil_header_t *zh = zilog->zl_header; in zil_replay_log_record()
3307 zilog->zl_replaying_seq = lr->lrc_seq; in zil_replay_log_record()
3319 return (zil_replay_error(zilog, lr, EINVAL)); in zil_replay_log_record()
3326 error = dmu_object_info(zilog->zl_os, in zil_replay_log_record()
3341 error = zil_read_log_data(zilog, (lr_write_t *)lr, in zil_replay_log_record()
3344 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
3372 txg_wait_synced(spa_get_dsl(zilog->zl_spa), 0); in zil_replay_log_record()
3375 return (zil_replay_error(zilog, lr, error)); in zil_replay_log_record()
3382 zil_incr_blks(zilog_t *zilog, blkptr_t *bp, void *arg, uint64_t claim_txg) in zil_incr_blks() argument
3384 zilog->zl_replay_blks++; in zil_incr_blks()
3395 zilog_t *zilog = dmu_objset_zil(os); in zil_replay() local
3396 const zil_header_t *zh = zilog->zl_header; in zil_replay()
3400 zil_destroy(zilog, B_TRUE); in zil_replay()
3412 txg_wait_synced(zilog->zl_dmu_pool, 0); in zil_replay()
3414 zilog->zl_replay = B_TRUE; in zil_replay()
3415 zilog->zl_replay_time = ddi_get_lbolt(); in zil_replay()
3416 ASSERT(zilog->zl_replay_blks == 0); in zil_replay()
3417 (void) zil_parse(zilog, zil_incr_blks, zil_replay_log_record, &zr, in zil_replay()
3421 zil_destroy(zilog, B_FALSE); in zil_replay()
3422 txg_wait_synced(zilog->zl_dmu_pool, zilog->zl_destroy_txg); in zil_replay()
3423 zilog->zl_replay = B_FALSE; in zil_replay()
3427 zil_replaying(zilog_t *zilog, dmu_tx_t *tx) in zil_replaying() argument
3429 if (zilog->zl_sync == ZFS_SYNC_DISABLED) in zil_replaying()
3432 if (zilog->zl_replay) { in zil_replaying()
3433 dsl_dataset_dirty(dmu_objset_ds(zilog->zl_os), tx); in zil_replaying()
3434 zilog->zl_replayed_seq[dmu_tx_get_txg(tx) & TXG_MASK] = in zil_replaying()
3435 zilog->zl_replaying_seq; in zil_replaying()