Lines Matching refs:spa

302 spa_estimate_incoming_log_blocks(spa_t *spa)  in spa_estimate_incoming_log_blocks()  argument
304 ASSERT3U(spa_sync_pass(spa), ==, 1); in spa_estimate_incoming_log_blocks()
307 for (spa_log_sm_t *sls = avl_last(&spa->spa_sm_logs_by_txg); in spa_estimate_incoming_log_blocks()
309 sls = AVL_PREV(&spa->spa_sm_logs_by_txg, sls)) { in spa_estimate_incoming_log_blocks()
310 if (sls->sls_txg == spa_syncing_txg(spa)) { in spa_estimate_incoming_log_blocks()
324 spa_log_sm_blocklimit(spa_t *spa) in spa_log_sm_blocklimit() argument
326 return (spa->spa_unflushed_stats.sus_blocklimit); in spa_log_sm_blocklimit()
330 spa_log_sm_set_blocklimit(spa_t *spa) in spa_log_sm_set_blocklimit() argument
332 if (!spa_feature_is_active(spa, SPA_FEATURE_LOG_SPACEMAP)) { in spa_log_sm_set_blocklimit()
333 ASSERT0(spa_log_sm_blocklimit(spa)); in spa_log_sm_set_blocklimit()
338 (spa_total_metaslabs(spa) * zfs_unflushed_log_block_pct) / 100; in spa_log_sm_set_blocklimit()
339 spa->spa_unflushed_stats.sus_blocklimit = MIN(MAX(calculated_limit, in spa_log_sm_set_blocklimit()
344 spa_log_sm_nblocks(spa_t *spa) in spa_log_sm_nblocks() argument
346 return (spa->spa_unflushed_stats.sus_nblocks); in spa_log_sm_nblocks()
354 spa_log_summary_verify_counts(spa_t *spa) in spa_log_summary_verify_counts() argument
356 ASSERT(spa_feature_is_active(spa, SPA_FEATURE_LOG_SPACEMAP)); in spa_log_summary_verify_counts()
361 uint64_t ms_in_avl = avl_numnodes(&spa->spa_metaslabs_by_flushed); in spa_log_summary_verify_counts()
364 for (log_summary_entry_t *e = list_head(&spa->spa_log_summary); in spa_log_summary_verify_counts()
365 e; e = list_next(&spa->spa_log_summary, e)) { in spa_log_summary_verify_counts()
371 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in spa_log_summary_verify_counts()
372 sls; sls = AVL_NEXT(&spa->spa_sm_logs_by_txg, sls)) { in spa_log_summary_verify_counts()
380 VERIFY3U(blk_in_logs, ==, spa_log_sm_nblocks(spa)); in spa_log_summary_verify_counts()
384 summary_entry_is_full(spa_t *spa, log_summary_entry_t *e) in summary_entry_is_full() argument
387 DIV_ROUND_UP(spa_log_sm_blocklimit(spa), in summary_entry_is_full()
406 spa_log_summary_decrement_mscount(spa_t *spa, uint64_t txg) in spa_log_summary_decrement_mscount() argument
412 if (!spa_writeable(spa)) in spa_log_summary_decrement_mscount()
416 for (log_summary_entry_t *e = list_head(&spa->spa_log_summary); in spa_log_summary_decrement_mscount()
417 e != NULL; e = list_next(&spa->spa_log_summary, e)) { in spa_log_summary_decrement_mscount()
429 VERIFY3S(spa_load_state(spa), ==, SPA_LOAD_ERROR); in spa_log_summary_decrement_mscount()
493 spa_log_summary_decrement_blkcount(spa_t *spa, uint64_t blocks_gone) in spa_log_summary_decrement_blkcount() argument
495 for (log_summary_entry_t *e = list_head(&spa->spa_log_summary); in spa_log_summary_decrement_blkcount()
496 e != NULL; e = list_head(&spa->spa_log_summary)) { in spa_log_summary_decrement_blkcount()
510 list_remove(&spa->spa_log_summary, e); in spa_log_summary_decrement_blkcount()
520 VERIFY3P(e, ==, list_tail(&spa->spa_log_summary)); in spa_log_summary_decrement_blkcount()
521 ASSERT3P(e, ==, list_head(&spa->spa_log_summary)); in spa_log_summary_decrement_blkcount()
536 spa_log_sm_decrement_mscount(spa_t *spa, uint64_t txg) in spa_log_sm_decrement_mscount() argument
539 spa_log_sm_t *sls = avl_find(&spa->spa_sm_logs_by_txg, in spa_log_sm_decrement_mscount()
547 VERIFY3S(spa_load_state(spa), ==, SPA_LOAD_ERROR); in spa_log_sm_decrement_mscount()
556 spa_log_sm_increment_current_mscount(spa_t *spa) in spa_log_sm_increment_current_mscount() argument
558 spa_log_sm_t *last_sls = avl_last(&spa->spa_sm_logs_by_txg); in spa_log_sm_increment_current_mscount()
560 ASSERT3U(last_sls->sls_txg, ==, spa_syncing_txg(spa)); in spa_log_sm_increment_current_mscount()
565 summary_add_data(spa_t *spa, uint64_t txg, uint64_t metaslabs_flushed, in summary_add_data() argument
568 log_summary_entry_t *e = list_tail(&spa->spa_log_summary); in summary_add_data()
570 if (e == NULL || summary_entry_is_full(spa, e)) { in summary_add_data()
573 list_insert_tail(&spa->spa_log_summary, e); in summary_add_data()
582 spa_log_summary_add_incoming_blocks(spa_t *spa, uint64_t nblocks) in spa_log_summary_add_incoming_blocks() argument
584 summary_add_data(spa, spa_syncing_txg(spa), 0, nblocks); in spa_log_summary_add_incoming_blocks()
588 spa_log_summary_add_flushed_metaslab(spa_t *spa) in spa_log_summary_add_flushed_metaslab() argument
590 summary_add_data(spa, spa_syncing_txg(spa), 1, 0); in spa_log_summary_add_flushed_metaslab()
606 spa_estimate_metaslabs_to_flush(spa_t *spa) in spa_estimate_metaslabs_to_flush() argument
608 ASSERT(spa_feature_is_active(spa, SPA_FEATURE_LOG_SPACEMAP)); in spa_estimate_metaslabs_to_flush()
609 ASSERT3U(spa_sync_pass(spa), ==, 1); in spa_estimate_metaslabs_to_flush()
610 ASSERT(spa_log_sm_blocklimit(spa) != 0); in spa_estimate_metaslabs_to_flush()
616 uint64_t incoming = spa_estimate_incoming_log_blocks(spa); in spa_estimate_metaslabs_to_flush()
634 spa_log_sm_blocklimit(spa) - spa_log_sm_nblocks(spa) - incoming; in spa_estimate_metaslabs_to_flush()
644 MIN(avl_numnodes(&spa->spa_metaslabs_by_flushed), in spa_estimate_metaslabs_to_flush()
651 for (log_summary_entry_t *e = list_head(&spa->spa_log_summary); in spa_estimate_metaslabs_to_flush()
652 e; e = list_next(&spa->spa_log_summary, e)) { in spa_estimate_metaslabs_to_flush()
686 ASSERT3U(avl_numnodes(&spa->spa_metaslabs_by_flushed), >=, in spa_estimate_metaslabs_to_flush()
693 spa_log_sm_memused(spa_t *spa) in spa_log_sm_memused() argument
695 return (spa->spa_unflushed_stats.sus_memused); in spa_log_sm_memused()
699 spa_log_exceeds_memlimit(spa_t *spa) in spa_log_exceeds_memlimit() argument
701 if (spa_log_sm_memused(spa) > zfs_unflushed_max_mem_amt) in spa_log_exceeds_memlimit()
706 if (spa_log_sm_memused(spa) > system_mem_allowed) in spa_log_exceeds_memlimit()
713 spa_flush_all_logs_requested(spa_t *spa) in spa_flush_all_logs_requested() argument
715 return (spa->spa_log_flushall_txg != 0); in spa_flush_all_logs_requested()
719 spa_flush_metaslabs(spa_t *spa, dmu_tx_t *tx) in spa_flush_metaslabs() argument
723 if (spa_sync_pass(spa) != 1) in spa_flush_metaslabs()
726 if (!spa_feature_is_active(spa, SPA_FEATURE_LOG_SPACEMAP)) in spa_flush_metaslabs()
733 if (avl_numnodes(&spa->spa_metaslabs_by_flushed) == 0) in spa_flush_metaslabs()
749 if (spa->spa_uberblock.ub_rootbp.blk_birth < txg && in spa_flush_metaslabs()
750 !dmu_objset_is_dirty(spa_meta_objset(spa), txg) && in spa_flush_metaslabs()
751 !spa_flush_all_logs_requested(spa)) in spa_flush_metaslabs()
766 spa_generate_syncing_log_sm(spa, tx); in spa_flush_metaslabs()
775 if (spa_flush_all_logs_requested(spa)) { in spa_flush_metaslabs()
776 ASSERT3S(spa_state(spa), ==, POOL_STATE_EXPORTED); in spa_flush_metaslabs()
777 want_to_flush = avl_numnodes(&spa->spa_metaslabs_by_flushed); in spa_flush_metaslabs()
779 want_to_flush = spa_estimate_metaslabs_to_flush(spa); in spa_flush_metaslabs()
782 ASSERT3U(avl_numnodes(&spa->spa_metaslabs_by_flushed), >=, in spa_flush_metaslabs()
797 for (metaslab_t *curr = avl_first(&spa->spa_metaslabs_by_flushed); in spa_flush_metaslabs()
799 next = AVL_NEXT(&spa->spa_metaslabs_by_flushed, curr); in spa_flush_metaslabs()
812 if (want_to_flush == 0 && !spa_log_exceeds_memlimit(spa)) in spa_flush_metaslabs()
839 ASSERT3U(avl_numnodes(&spa->spa_metaslabs_by_flushed), >=, visited); in spa_flush_metaslabs()
847 spa_sync_close_syncing_log_sm(spa_t *spa) in spa_sync_close_syncing_log_sm() argument
849 if (spa_syncing_log_sm(spa) == NULL) in spa_sync_close_syncing_log_sm()
851 ASSERT(spa_feature_is_active(spa, SPA_FEATURE_LOG_SPACEMAP)); in spa_sync_close_syncing_log_sm()
853 spa_log_sm_t *sls = avl_last(&spa->spa_sm_logs_by_txg); in spa_sync_close_syncing_log_sm()
854 ASSERT3U(sls->sls_txg, ==, spa_syncing_txg(spa)); in spa_sync_close_syncing_log_sm()
856 sls->sls_nblocks = space_map_nblocks(spa_syncing_log_sm(spa)); in spa_sync_close_syncing_log_sm()
857 spa->spa_unflushed_stats.sus_nblocks += sls->sls_nblocks; in spa_sync_close_syncing_log_sm()
867 spa_log_summary_add_incoming_blocks(spa, sls->sls_nblocks); in spa_sync_close_syncing_log_sm()
868 spa_log_summary_verify_counts(spa); in spa_sync_close_syncing_log_sm()
870 space_map_close(spa->spa_syncing_log_sm); in spa_sync_close_syncing_log_sm()
871 spa->spa_syncing_log_sm = NULL; in spa_sync_close_syncing_log_sm()
879 if (spa_flush_all_logs_requested(spa)) { in spa_sync_close_syncing_log_sm()
880 ASSERT3S(spa_state(spa), ==, POOL_STATE_EXPORTED); in spa_sync_close_syncing_log_sm()
881 spa->spa_log_flushall_txg = 0; in spa_sync_close_syncing_log_sm()
886 spa_cleanup_old_sm_logs(spa_t *spa, dmu_tx_t *tx) in spa_cleanup_old_sm_logs() argument
888 objset_t *mos = spa_meta_objset(spa); in spa_cleanup_old_sm_logs()
894 ASSERT(avl_is_empty(&spa->spa_sm_logs_by_txg)); in spa_cleanup_old_sm_logs()
899 metaslab_t *oldest = avl_first(&spa->spa_metaslabs_by_flushed); in spa_cleanup_old_sm_logs()
903 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in spa_cleanup_old_sm_logs()
905 sls = avl_first(&spa->spa_sm_logs_by_txg)) { in spa_cleanup_old_sm_logs()
907 avl_remove(&spa->spa_sm_logs_by_txg, sls); in spa_cleanup_old_sm_logs()
910 spa->spa_unflushed_stats.sus_nblocks -= sls->sls_nblocks; in spa_cleanup_old_sm_logs()
926 spa_generate_syncing_log_sm(spa_t *spa, dmu_tx_t *tx) in spa_generate_syncing_log_sm() argument
929 objset_t *mos = spa_meta_objset(spa); in spa_generate_syncing_log_sm()
931 if (spa_syncing_log_sm(spa) != NULL) in spa_generate_syncing_log_sm()
934 if (!spa_feature_is_enabled(spa, SPA_FEATURE_LOG_SPACEMAP)) in spa_generate_syncing_log_sm()
941 ASSERT(avl_is_empty(&spa->spa_sm_logs_by_txg)); in spa_generate_syncing_log_sm()
949 spa_feature_incr(spa, SPA_FEATURE_LOG_SPACEMAP, tx); in spa_generate_syncing_log_sm()
958 avl_add(&spa->spa_sm_logs_by_txg, spa_log_sm_alloc(sm_obj, txg)); in spa_generate_syncing_log_sm()
967 VERIFY0(space_map_open(&spa->spa_syncing_log_sm, mos, sm_obj, in spa_generate_syncing_log_sm()
974 if (spa_log_sm_blocklimit(spa) == 0) in spa_generate_syncing_log_sm()
975 spa_log_sm_set_blocklimit(spa); in spa_generate_syncing_log_sm()
983 spa_ld_log_sm_metadata(spa_t *spa) in spa_ld_log_sm_metadata() argument
988 ASSERT(avl_is_empty(&spa->spa_sm_logs_by_txg)); in spa_ld_log_sm_metadata()
990 error = zap_lookup(spa_meta_objset(spa), DMU_POOL_DIRECTORY_OBJECT, in spa_ld_log_sm_metadata()
996 spa_load_failed(spa, "spa_ld_log_sm_metadata(): failed at " in spa_ld_log_sm_metadata()
1004 for (zap_cursor_init(&zc, spa_meta_objset(spa), spacemap_zap); in spa_ld_log_sm_metadata()
1010 avl_add(&spa->spa_sm_logs_by_txg, sls); in spa_ld_log_sm_metadata()
1014 spa_load_failed(spa, "spa_ld_log_sm_metadata(): failed at " in spa_ld_log_sm_metadata()
1020 for (metaslab_t *m = avl_first(&spa->spa_metaslabs_by_flushed); in spa_ld_log_sm_metadata()
1021 m; m = AVL_NEXT(&spa->spa_metaslabs_by_flushed, m)) { in spa_ld_log_sm_metadata()
1023 spa_log_sm_t *sls = avl_find(&spa->spa_sm_logs_by_txg, in spa_ld_log_sm_metadata()
1038 spa_load_failed(spa, "spa_ld_log_sm_metadata(): bug " in spa_ld_log_sm_metadata()
1062 spa_t *spa = slls->slls_spa; in spa_ld_log_sm_cb() local
1064 vdev_t *vd = vdev_lookup_top(spa, vdev_id); in spa_ld_log_sm_cb()
1104 spa_ld_log_sm_data(spa_t *spa) in spa_ld_log_sm_data() argument
1112 if (!spa_writeable(spa)) in spa_ld_log_sm_data()
1115 ASSERT0(spa->spa_unflushed_stats.sus_nblocks); in spa_ld_log_sm_data()
1116 ASSERT0(spa->spa_unflushed_stats.sus_memused); in spa_ld_log_sm_data()
1120 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in spa_ld_log_sm_data()
1121 sls; sls = AVL_NEXT(&spa->spa_sm_logs_by_txg, sls)) { in spa_ld_log_sm_data()
1123 error = space_map_open(&sm, spa_meta_objset(spa), in spa_ld_log_sm_data()
1126 spa_load_failed(spa, "spa_ld_log_sm_data(): failed at " in spa_ld_log_sm_data()
1133 .slls_spa = spa, in spa_ld_log_sm_data()
1140 spa_load_failed(spa, "spa_ld_log_sm_data(): failed " in spa_ld_log_sm_data()
1148 spa->spa_unflushed_stats.sus_nblocks += sls->sls_nblocks; in spa_ld_log_sm_data()
1149 summary_add_data(spa, sls->sls_txg, in spa_ld_log_sm_data()
1155 spa_load_note(spa, in spa_ld_log_sm_data()
1157 "in %lld ms", (u_longlong_t)avl_numnodes(&spa->spa_sm_logs_by_txg), in spa_ld_log_sm_data()
1158 (u_longlong_t)spa_log_sm_nblocks(spa), in spa_ld_log_sm_data()
1174 for (metaslab_t *m = avl_first(&spa->spa_metaslabs_by_flushed); in spa_ld_log_sm_data()
1175 m != NULL; m = AVL_NEXT(&spa->spa_metaslabs_by_flushed, m)) { in spa_ld_log_sm_data()
1190 spa->spa_unflushed_stats.sus_memused += in spa_ld_log_sm_data()
1206 spa_t *spa = vd->vdev_spa; in spa_ld_unflushed_txgs() local
1207 objset_t *mos = spa_meta_objset(spa); in spa_ld_unflushed_txgs()
1219 spa_load_failed(spa, "spa_ld_unflushed_txgs(): failed at " in spa_ld_unflushed_txgs()
1236 spa_load_failed(spa, "spa_ld_unflushed_txgs(): " in spa_ld_unflushed_txgs()
1244 mutex_enter(&spa->spa_flushed_ms_lock); in spa_ld_unflushed_txgs()
1245 avl_add(&spa->spa_metaslabs_by_flushed, ms); in spa_ld_unflushed_txgs()
1246 mutex_exit(&spa->spa_flushed_ms_lock); in spa_ld_unflushed_txgs()
1259 spa_ld_log_spacemaps(spa_t *spa) in spa_ld_log_spacemaps() argument
1263 spa_log_sm_set_blocklimit(spa); in spa_ld_log_spacemaps()
1265 for (uint64_t c = 0; c < spa->spa_root_vdev->vdev_children; c++) { in spa_ld_log_spacemaps()
1266 vdev_t *vd = spa->spa_root_vdev->vdev_child[c]; in spa_ld_log_spacemaps()
1272 error = spa_ld_log_sm_metadata(spa); in spa_ld_log_spacemaps()
1281 spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER); in spa_ld_log_spacemaps()
1282 error = spa_ld_log_sm_data(spa); in spa_ld_log_spacemaps()
1283 spa_config_exit(spa, SCL_CONFIG, FTAG); in spa_ld_log_spacemaps()