Lines Matching refs:mc

373 	metaslab_class_t *mc;  in metaslab_class_create()  local
375 mc = kmem_zalloc(sizeof (metaslab_class_t), KM_SLEEP); in metaslab_class_create()
377 mc->mc_spa = spa; in metaslab_class_create()
378 mc->mc_rotor = NULL; in metaslab_class_create()
379 mc->mc_ops = ops; in metaslab_class_create()
380 mutex_init(&mc->mc_lock, NULL, MUTEX_DEFAULT, NULL); in metaslab_class_create()
381 mc->mc_metaslab_txg_list = multilist_create(sizeof (metaslab_t), in metaslab_class_create()
383 mc->mc_alloc_slots = kmem_zalloc(spa->spa_alloc_count * in metaslab_class_create()
385 mc->mc_alloc_max_slots = kmem_zalloc(spa->spa_alloc_count * in metaslab_class_create()
388 zfs_refcount_create_tracked(&mc->mc_alloc_slots[i]); in metaslab_class_create()
390 return (mc); in metaslab_class_create()
394 metaslab_class_destroy(metaslab_class_t *mc) in metaslab_class_destroy() argument
396 ASSERT(mc->mc_rotor == NULL); in metaslab_class_destroy()
397 ASSERT(mc->mc_alloc == 0); in metaslab_class_destroy()
398 ASSERT(mc->mc_deferred == 0); in metaslab_class_destroy()
399 ASSERT(mc->mc_space == 0); in metaslab_class_destroy()
400 ASSERT(mc->mc_dspace == 0); in metaslab_class_destroy()
402 for (int i = 0; i < mc->mc_spa->spa_alloc_count; i++) in metaslab_class_destroy()
403 zfs_refcount_destroy(&mc->mc_alloc_slots[i]); in metaslab_class_destroy()
404 kmem_free(mc->mc_alloc_slots, mc->mc_spa->spa_alloc_count * in metaslab_class_destroy()
406 kmem_free(mc->mc_alloc_max_slots, mc->mc_spa->spa_alloc_count * in metaslab_class_destroy()
408 mutex_destroy(&mc->mc_lock); in metaslab_class_destroy()
409 multilist_destroy(mc->mc_metaslab_txg_list); in metaslab_class_destroy()
410 kmem_free(mc, sizeof (metaslab_class_t)); in metaslab_class_destroy()
414 metaslab_class_validate(metaslab_class_t *mc) in metaslab_class_validate() argument
422 ASSERT(spa_config_held(mc->mc_spa, SCL_ALL, RW_READER) || in metaslab_class_validate()
423 spa_config_held(mc->mc_spa, SCL_ALL, RW_WRITER)); in metaslab_class_validate()
425 if ((mg = mc->mc_rotor) == NULL) in metaslab_class_validate()
432 ASSERT3P(mg->mg_class, ==, mc); in metaslab_class_validate()
434 } while ((mg = mg->mg_next) != mc->mc_rotor); in metaslab_class_validate()
440 metaslab_class_space_update(metaslab_class_t *mc, int64_t alloc_delta, in metaslab_class_space_update() argument
443 atomic_add_64(&mc->mc_alloc, alloc_delta); in metaslab_class_space_update()
444 atomic_add_64(&mc->mc_deferred, defer_delta); in metaslab_class_space_update()
445 atomic_add_64(&mc->mc_space, space_delta); in metaslab_class_space_update()
446 atomic_add_64(&mc->mc_dspace, dspace_delta); in metaslab_class_space_update()
450 metaslab_class_get_alloc(metaslab_class_t *mc) in metaslab_class_get_alloc() argument
452 return (mc->mc_alloc); in metaslab_class_get_alloc()
456 metaslab_class_get_deferred(metaslab_class_t *mc) in metaslab_class_get_deferred() argument
458 return (mc->mc_deferred); in metaslab_class_get_deferred()
462 metaslab_class_get_space(metaslab_class_t *mc) in metaslab_class_get_space() argument
464 return (mc->mc_space); in metaslab_class_get_space()
468 metaslab_class_get_dspace(metaslab_class_t *mc) in metaslab_class_get_dspace() argument
470 return (spa_deflate(mc->mc_spa) ? mc->mc_dspace : mc->mc_space); in metaslab_class_get_dspace()
474 metaslab_class_histogram_verify(metaslab_class_t *mc) in metaslab_class_histogram_verify() argument
476 spa_t *spa = mc->mc_spa; in metaslab_class_histogram_verify()
496 mg->mg_class != mc) { in metaslab_class_histogram_verify()
505 VERIFY3U(mc_hist[i], ==, mc->mc_histogram[i]); in metaslab_class_histogram_verify()
518 metaslab_class_fragmentation(metaslab_class_t *mc) in metaslab_class_fragmentation() argument
520 vdev_t *rvd = mc->mc_spa->spa_root_vdev; in metaslab_class_fragmentation()
523 spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER); in metaslab_class_fragmentation()
534 mg->mg_class != mc) { in metaslab_class_fragmentation()
543 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); in metaslab_class_fragmentation()
554 fragmentation /= metaslab_class_get_space(mc); in metaslab_class_fragmentation()
557 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); in metaslab_class_fragmentation()
568 metaslab_class_expandable_space(metaslab_class_t *mc) in metaslab_class_expandable_space() argument
570 vdev_t *rvd = mc->mc_spa->spa_root_vdev; in metaslab_class_expandable_space()
573 spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER); in metaslab_class_expandable_space()
580 mg->mg_class != mc) { in metaslab_class_expandable_space()
591 if (tspace > mc->mc_spa->spa_bootsize) { in metaslab_class_expandable_space()
592 tspace -= mc->mc_spa->spa_bootsize; in metaslab_class_expandable_space()
596 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG); in metaslab_class_expandable_space()
601 metaslab_class_evict_old(metaslab_class_t *mc, uint64_t txg) in metaslab_class_evict_old() argument
603 multilist_t *ml = mc->mc_metaslab_txg_list; in metaslab_class_evict_old()
701 metaslab_class_t *mc = mg->mg_class; in metaslab_group_alloc_update() local
707 ASSERT3U(spa_config_held(mc->mc_spa, SCL_ALLOC, RW_READER), ==, in metaslab_group_alloc_update()
717 mutex_enter(&mc->mc_lock); in metaslab_group_alloc_update()
729 mc->mc_groups++; in metaslab_group_alloc_update()
731 ASSERT3U(mc->mc_groups, >, 0); in metaslab_group_alloc_update()
732 mc->mc_groups--; in metaslab_group_alloc_update()
764 mc->mc_alloc_groups--; in metaslab_group_alloc_update()
766 mc->mc_alloc_groups++; in metaslab_group_alloc_update()
767 mutex_exit(&mc->mc_lock); in metaslab_group_alloc_update()
792 metaslab_group_create(metaslab_class_t *mc, vdev_t *vd, int allocators) in metaslab_group_create() argument
807 mg->mg_class = mc; in metaslab_group_create()
864 metaslab_class_t *mc = mg->mg_class; in metaslab_group_activate() local
867 ASSERT3U(spa_config_held(mc->mc_spa, SCL_ALLOC, RW_WRITER), !=, 0); in metaslab_group_activate()
869 ASSERT(mc->mc_rotor != mg); in metaslab_group_activate()
880 if ((mgprev = mc->mc_rotor) == NULL) { in metaslab_group_activate()
890 mc->mc_rotor = mg; in metaslab_group_activate()
902 metaslab_class_t *mc = mg->mg_class; in metaslab_group_passivate() local
903 spa_t *spa = mc->mc_spa; in metaslab_group_passivate()
911 ASSERT(mc->mc_rotor != mg); in metaslab_group_passivate()
957 mc->mc_rotor = NULL; in metaslab_group_passivate()
959 mc->mc_rotor = mgnext; in metaslab_group_passivate()
1021 metaslab_class_t *mc = mg->mg_class; in metaslab_group_histogram_add() local
1032 mc->mc_histogram[i + ashift] += in metaslab_group_histogram_add()
1041 metaslab_class_t *mc = mg->mg_class; in metaslab_group_histogram_remove() local
1052 ASSERT3U(mc->mc_histogram[i + ashift], >=, in metaslab_group_histogram_remove()
1057 mc->mc_histogram[i + ashift] -= in metaslab_group_histogram_remove()
1089 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_group_remove() local
1091 multilist_sublist_lock_obj(mc->mc_metaslab_txg_list, msp); in metaslab_group_remove()
1177 metaslab_class_t *mc = mg->mg_class; in metaslab_group_allocatable() local
1185 if ((mc != spa_normal_class(spa) && in metaslab_group_allocatable()
1186 mc != spa_special_class(spa) && in metaslab_group_allocatable()
1187 mc != spa_dedup_class(spa)) || in metaslab_group_allocatable()
1188 mc->mc_groups <= 1) in metaslab_group_allocatable()
1208 if (!mc->mc_alloc_throttle_enabled) in metaslab_group_allocatable()
1233 if (qdepth < qmax || mc->mc_alloc_groups == 1) in metaslab_group_allocatable()
1235 ASSERT3U(mc->mc_alloc_groups, >, 1); in metaslab_group_allocatable()
1266 } else if (mc->mc_alloc_groups == 0 || psize == SPA_MINBLOCKSIZE) { in metaslab_group_allocatable()
2104 metaslab_potentially_evict(metaslab_class_t *mc) in metaslab_potentially_evict() argument
2113 tries < multilist_get_num_sublists(mc->mc_metaslab_txg_list) * 2; in metaslab_potentially_evict()
2116 mc->mc_metaslab_txg_list); in metaslab_potentially_evict()
2118 multilist_sublist_lock(mc->mc_metaslab_txg_list, idx); in metaslab_potentially_evict()
2124 mc->mc_metaslab_txg_list, idx)); in metaslab_potentially_evict()
2126 metaslab_idx_func(mc->mc_metaslab_txg_list, msp)); in metaslab_potentially_evict()
2478 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_unload() local
2480 multilist_sublist_lock_obj(mc->mc_metaslab_txg_list, msp); in metaslab_unload()
2529 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_set_selected_txg() local
2531 multilist_sublist_lock_obj(mc->mc_metaslab_txg_list, msp); in metaslab_set_selected_txg()
2541 metaslab_space_update(vdev_t *vd, metaslab_class_t *mc, int64_t alloc_delta, in metaslab_space_update() argument
2549 metaslab_class_space_update(mc, alloc_delta, defer_delta, space_delta, in metaslab_space_update()
3374 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_preload() local
3375 spa_t *spa = mc->mc_spa; in metaslab_preload()
4519 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_block_alloc() local
4525 start = mc->mc_ops->msop_alloc(msp, size); in metaslab_block_alloc()
5003 metaslab_alloc_dva(spa_t *spa, metaslab_class_t *mc, uint64_t psize, in metaslab_alloc_dva() argument
5061 mg = mc->mc_rotor; in metaslab_alloc_dva()
5067 ASSERT(mc->mc_rotor != NULL); in metaslab_alloc_dva()
5068 mg = mc->mc_rotor; in metaslab_alloc_dva()
5075 if (mg->mg_class != mc || mg->mg_activation_count <= 0) in metaslab_alloc_dva()
5076 mg = mc->mc_rotor; in metaslab_alloc_dva()
5130 ASSERT(mg->mg_class == mc); in metaslab_alloc_dva()
5151 if (mc->mc_aliquot == 0 && metaslab_bias_enabled) { in metaslab_alloc_dva()
5156 cu = (mc->mc_alloc * 100) / (mc->mc_space + 1); in metaslab_alloc_dva()
5177 if (atomic_add_64_nv(&mc->mc_aliquot, asize) >= in metaslab_alloc_dva()
5179 mc->mc_rotor = mg->mg_next; in metaslab_alloc_dva()
5180 mc->mc_aliquot = 0; in metaslab_alloc_dva()
5191 mc->mc_rotor = mg->mg_next; in metaslab_alloc_dva()
5192 mc->mc_aliquot = 0; in metaslab_alloc_dva()
5507 metaslab_class_throttle_reserve(metaslab_class_t *mc, int slots, int allocator, in metaslab_class_throttle_reserve() argument
5512 uint64_t max = mc->mc_alloc_max_slots[allocator]; in metaslab_class_throttle_reserve()
5514 ASSERT(mc->mc_alloc_throttle_enabled); in metaslab_class_throttle_reserve()
5515 mutex_enter(&mc->mc_lock); in metaslab_class_throttle_reserve()
5518 zfs_refcount_count(&mc->mc_alloc_slots[allocator]); in metaslab_class_throttle_reserve()
5528 zfs_refcount_add_few(&mc->mc_alloc_slots[allocator], slots, in metaslab_class_throttle_reserve()
5534 mutex_exit(&mc->mc_lock); in metaslab_class_throttle_reserve()
5539 metaslab_class_throttle_unreserve(metaslab_class_t *mc, int slots, in metaslab_class_throttle_unreserve() argument
5542 ASSERT(mc->mc_alloc_throttle_enabled); in metaslab_class_throttle_unreserve()
5543 mutex_enter(&mc->mc_lock); in metaslab_class_throttle_unreserve()
5544 zfs_refcount_remove_few(&mc->mc_alloc_slots[allocator], slots, zio); in metaslab_class_throttle_unreserve()
5545 mutex_exit(&mc->mc_lock); in metaslab_class_throttle_unreserve()
5591 metaslab_class_t *mc = msp->ms_group->mg_class; in metaslab_claim_concrete() local
5593 multilist_sublist_lock_obj(mc->mc_metaslab_txg_list, msp); in metaslab_claim_concrete()
5685 metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp, in metaslab_alloc() argument
5698 if (mc->mc_rotor == NULL) { /* no vdevs in this class */ in metaslab_alloc()
5709 error = metaslab_alloc_dva(spa, mc, psize, dva, d, hintdva, in metaslab_alloc()