Lines Matching refs:mg

481 		metaslab_group_t *mg, *rotor;  in metaslab_class_validate()  local
486 if ((mg = rotor = mca->mca_rotor) == NULL) in metaslab_class_validate()
489 metaslab_group_allocator_t *mga = &mg->mg_allocator[i]; in metaslab_class_validate()
490 vdev_t *vd = mg->mg_vd; in metaslab_class_validate()
493 ASSERT(vd->vdev_mg == mg || vd->vdev_log_mg == mg); in metaslab_class_validate()
494 ASSERT3P(mg->mg_class, ==, mc); in metaslab_class_validate()
497 } while ((mg = mg->mg_next) != rotor); in metaslab_class_validate()
512 metaslab_group_t *mg, *first; in metaslab_class_balance() local
541 mg = first = mc->mc_allocator[0].mca_rotor; in metaslab_class_balance()
544 children += vdev_get_ndisks(mg->mg_vd) - in metaslab_class_balance()
545 vdev_get_nparity(mg->mg_vd); in metaslab_class_balance()
546 } while ((mg = mg->mg_next) != first); in metaslab_class_balance()
550 vdev_stat_t *vs = &mg->mg_vd->vdev_stat; in metaslab_class_balance()
601 mg->mg_aliquot = mg_aliquot * ratio / 256; in metaslab_class_balance()
604 mg->mg_queue_target = MAX(mg->mg_aliquot, in metaslab_class_balance()
605 mg->mg_aliquot * ratio / 65536); in metaslab_class_balance()
607 mg->mg_aliquot = mg_aliquot; in metaslab_class_balance()
608 mg->mg_queue_target = mg->mg_aliquot * 2; in metaslab_class_balance()
610 sum_aliquot += mg->mg_aliquot; in metaslab_class_balance()
611 } while ((mg = mg->mg_next) != first); in metaslab_class_balance()
623 metaslab_class_rotate(metaslab_group_t *mg, int allocator, uint64_t psize, in metaslab_class_rotate() argument
626 metaslab_class_t *mc = mg->mg_class; in metaslab_class_rotate()
628 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator]; in metaslab_class_rotate()
634 if (mc->mc_groups < 2 || mca->mca_rotor != mg) in metaslab_class_rotate()
652 if (naq < mg->mg_aliquot) in metaslab_class_rotate()
654 if (naq >= mg->mg_queue_target) in metaslab_class_rotate()
657 mg->mg_queue_target) in metaslab_class_rotate()
680 mca->mca_rotor = mg->mg_next; in metaslab_class_rotate()
741 metaslab_group_t *mg = vdev_get_mg(tvd, mc); in metaslab_class_histogram_verify() local
748 mg->mg_class != mc) { in metaslab_class_histogram_verify()
752 IMPLY(mg == mg->mg_vd->vdev_log_mg, in metaslab_class_histogram_verify()
753 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa)); in metaslab_class_histogram_verify()
756 mc_hist[i] += mg->mg_histogram[i]; in metaslab_class_histogram_verify()
784 metaslab_group_t *mg = tvd->vdev_mg; in metaslab_class_fragmentation() local
791 mg->mg_class != mc) { in metaslab_class_fragmentation()
799 if (mg->mg_fragmentation == ZFS_FRAG_INVALID) { in metaslab_class_fragmentation()
808 fragmentation += mg->mg_fragmentation * in metaslab_class_fragmentation()
809 metaslab_group_get_space(mg); in metaslab_class_fragmentation()
833 metaslab_group_t *mg = tvd->vdev_mg; in metaslab_class_expandable_space() local
836 mg->mg_class != mc) { in metaslab_class_expandable_space()
954 metaslab_group_alloc_update(metaslab_group_t *mg) in metaslab_group_alloc_update() argument
956 vdev_t *vd = mg->mg_vd; in metaslab_group_alloc_update()
957 metaslab_class_t *mc = mg->mg_class; in metaslab_group_alloc_update()
966 mutex_enter(&mg->mg_lock); in metaslab_group_alloc_update()
967 was_allocatable = mg->mg_allocatable; in metaslab_group_alloc_update()
968 was_initialized = mg->mg_initialized; in metaslab_group_alloc_update()
983 mg->mg_initialized = metaslab_group_initialized(mg); in metaslab_group_alloc_update()
984 if (!was_initialized && mg->mg_initialized) { in metaslab_group_alloc_update()
986 } else if (was_initialized && !mg->mg_initialized) { in metaslab_group_alloc_update()
990 if (mg->mg_initialized) in metaslab_group_alloc_update()
991 mg->mg_no_free_space = B_FALSE; in metaslab_group_alloc_update()
999 mg->mg_allocatable = (mg->mg_activation_count > 0 && in metaslab_group_alloc_update()
1001 (mg->mg_fragmentation == ZFS_FRAG_INVALID || in metaslab_group_alloc_update()
1002 mg->mg_fragmentation <= zfs_mg_fragmentation_threshold)); in metaslab_group_alloc_update()
1019 if (was_allocatable && !mg->mg_allocatable) in metaslab_group_alloc_update()
1021 else if (!was_allocatable && mg->mg_allocatable) in metaslab_group_alloc_update()
1025 mutex_exit(&mg->mg_lock); in metaslab_group_alloc_update()
1051 metaslab_group_t *mg; in metaslab_group_create() local
1053 mg = kmem_zalloc(offsetof(metaslab_group_t, in metaslab_group_create()
1055 mutex_init(&mg->mg_lock, NULL, MUTEX_DEFAULT, NULL); in metaslab_group_create()
1056 mutex_init(&mg->mg_ms_disabled_lock, NULL, MUTEX_DEFAULT, NULL); in metaslab_group_create()
1057 cv_init(&mg->mg_ms_disabled_cv, NULL, CV_DEFAULT, NULL); in metaslab_group_create()
1058 avl_create(&mg->mg_metaslab_tree, metaslab_compare, in metaslab_group_create()
1060 mg->mg_vd = vd; in metaslab_group_create()
1061 mg->mg_class = mc; in metaslab_group_create()
1062 mg->mg_activation_count = 0; in metaslab_group_create()
1063 mg->mg_initialized = B_FALSE; in metaslab_group_create()
1064 mg->mg_no_free_space = B_TRUE; in metaslab_group_create()
1067 metaslab_group_allocator_t *mga = &mg->mg_allocator[i]; in metaslab_group_create()
1071 return (mg); in metaslab_group_create()
1075 metaslab_group_destroy(metaslab_group_t *mg) in metaslab_group_destroy() argument
1077 spa_t *spa = mg->mg_class->mc_spa; in metaslab_group_destroy()
1079 ASSERT(mg->mg_prev == NULL); in metaslab_group_destroy()
1080 ASSERT(mg->mg_next == NULL); in metaslab_group_destroy()
1086 ASSERT(mg->mg_activation_count <= 0); in metaslab_group_destroy()
1088 avl_destroy(&mg->mg_metaslab_tree); in metaslab_group_destroy()
1089 mutex_destroy(&mg->mg_lock); in metaslab_group_destroy()
1090 mutex_destroy(&mg->mg_ms_disabled_lock); in metaslab_group_destroy()
1091 cv_destroy(&mg->mg_ms_disabled_cv); in metaslab_group_destroy()
1094 metaslab_group_allocator_t *mga = &mg->mg_allocator[i]; in metaslab_group_destroy()
1097 kmem_free(mg, offsetof(metaslab_group_t, in metaslab_group_destroy()
1102 metaslab_group_activate(metaslab_group_t *mg) in metaslab_group_activate() argument
1104 metaslab_class_t *mc = mg->mg_class; in metaslab_group_activate()
1110 ASSERT(mg->mg_prev == NULL); in metaslab_group_activate()
1111 ASSERT(mg->mg_next == NULL); in metaslab_group_activate()
1112 ASSERT(mg->mg_activation_count <= 0); in metaslab_group_activate()
1114 if (++mg->mg_activation_count <= 0) in metaslab_group_activate()
1117 metaslab_group_alloc_update(mg); in metaslab_group_activate()
1120 mg->mg_prev = mg; in metaslab_group_activate()
1121 mg->mg_next = mg; in metaslab_group_activate()
1124 mg->mg_prev = mgprev; in metaslab_group_activate()
1125 mg->mg_next = mgnext; in metaslab_group_activate()
1126 mgprev->mg_next = mg; in metaslab_group_activate()
1127 mgnext->mg_prev = mg; in metaslab_group_activate()
1130 mc->mc_allocator[i].mca_rotor = mg; in metaslab_group_activate()
1131 mg = mg->mg_next; in metaslab_group_activate()
1143 metaslab_group_passivate(metaslab_group_t *mg) in metaslab_group_passivate() argument
1145 metaslab_class_t *mc = mg->mg_class; in metaslab_group_passivate()
1153 if (--mg->mg_activation_count != 0) { in metaslab_group_passivate()
1155 ASSERT(mc->mc_allocator[i].mca_rotor != mg); in metaslab_group_passivate()
1156 ASSERT(mg->mg_prev == NULL); in metaslab_group_passivate()
1157 ASSERT(mg->mg_next == NULL); in metaslab_group_passivate()
1158 ASSERT(mg->mg_activation_count < 0); in metaslab_group_passivate()
1179 metaslab_group_alloc_update(mg); in metaslab_group_passivate()
1181 metaslab_group_allocator_t *mga = &mg->mg_allocator[i]; in metaslab_group_passivate()
1198 mgprev = mg->mg_prev; in metaslab_group_passivate()
1199 mgnext = mg->mg_next; in metaslab_group_passivate()
1201 if (mg == mgnext) { in metaslab_group_passivate()
1208 if (mc->mc_allocator[i].mca_rotor == mg) in metaslab_group_passivate()
1212 mg->mg_prev = NULL; in metaslab_group_passivate()
1213 mg->mg_next = NULL; in metaslab_group_passivate()
1218 metaslab_group_initialized(metaslab_group_t *mg) in metaslab_group_initialized() argument
1220 vdev_t *vd = mg->mg_vd; in metaslab_group_initialized()
1223 return (vs->vs_space != 0 && mg->mg_activation_count > 0); in metaslab_group_initialized()
1227 metaslab_group_get_space(metaslab_group_t *mg) in metaslab_group_get_space() argument
1233 mutex_enter(&mg->mg_lock); in metaslab_group_get_space()
1234 uint64_t ms_count = avl_numnodes(&mg->mg_metaslab_tree); in metaslab_group_get_space()
1235 mutex_exit(&mg->mg_lock); in metaslab_group_get_space()
1236 return ((1ULL << mg->mg_vd->vdev_ms_shift) * ms_count); in metaslab_group_get_space()
1240 metaslab_group_histogram_verify(metaslab_group_t *mg) in metaslab_group_histogram_verify() argument
1243 avl_tree_t *t = &mg->mg_metaslab_tree; in metaslab_group_histogram_verify()
1244 uint64_t ashift = mg->mg_vd->vdev_ashift; in metaslab_group_histogram_verify()
1255 mutex_enter(&mg->mg_lock); in metaslab_group_histogram_verify()
1258 VERIFY3P(msp->ms_group, ==, mg); in metaslab_group_histogram_verify()
1270 VERIFY3U(mg_hist[i], ==, mg->mg_histogram[i]); in metaslab_group_histogram_verify()
1272 mutex_exit(&mg->mg_lock); in metaslab_group_histogram_verify()
1278 metaslab_group_histogram_add(metaslab_group_t *mg, metaslab_t *msp) in metaslab_group_histogram_add() argument
1280 metaslab_class_t *mc = mg->mg_class; in metaslab_group_histogram_add()
1281 uint64_t ashift = mg->mg_vd->vdev_ashift; in metaslab_group_histogram_add()
1287 mutex_enter(&mg->mg_lock); in metaslab_group_histogram_add()
1290 IMPLY(mg == mg->mg_vd->vdev_log_mg, in metaslab_group_histogram_add()
1291 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa)); in metaslab_group_histogram_add()
1292 mg->mg_histogram[i + ashift] += in metaslab_group_histogram_add()
1298 mutex_exit(&mg->mg_lock); in metaslab_group_histogram_add()
1302 metaslab_group_histogram_remove(metaslab_group_t *mg, metaslab_t *msp) in metaslab_group_histogram_remove() argument
1304 metaslab_class_t *mc = mg->mg_class; in metaslab_group_histogram_remove()
1305 uint64_t ashift = mg->mg_vd->vdev_ashift; in metaslab_group_histogram_remove()
1311 mutex_enter(&mg->mg_lock); in metaslab_group_histogram_remove()
1314 ASSERT3U(mg->mg_histogram[i + ashift], >=, in metaslab_group_histogram_remove()
1318 IMPLY(mg == mg->mg_vd->vdev_log_mg, in metaslab_group_histogram_remove()
1319 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa)); in metaslab_group_histogram_remove()
1321 mg->mg_histogram[i + ashift] -= in metaslab_group_histogram_remove()
1327 mutex_exit(&mg->mg_lock); in metaslab_group_histogram_remove()
1331 metaslab_group_add(metaslab_group_t *mg, metaslab_t *msp) in metaslab_group_add() argument
1334 mutex_enter(&mg->mg_lock); in metaslab_group_add()
1335 msp->ms_group = mg; in metaslab_group_add()
1337 avl_add(&mg->mg_metaslab_tree, msp); in metaslab_group_add()
1338 mutex_exit(&mg->mg_lock); in metaslab_group_add()
1341 metaslab_group_histogram_add(mg, msp); in metaslab_group_add()
1346 metaslab_group_remove(metaslab_group_t *mg, metaslab_t *msp) in metaslab_group_remove() argument
1349 metaslab_group_histogram_remove(mg, msp); in metaslab_group_remove()
1352 mutex_enter(&mg->mg_lock); in metaslab_group_remove()
1353 ASSERT(msp->ms_group == mg); in metaslab_group_remove()
1354 avl_remove(&mg->mg_metaslab_tree, msp); in metaslab_group_remove()
1364 mutex_exit(&mg->mg_lock); in metaslab_group_remove()
1368 metaslab_group_sort_impl(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight) in metaslab_group_sort_impl() argument
1371 ASSERT(MUTEX_HELD(&mg->mg_lock)); in metaslab_group_sort_impl()
1372 ASSERT(msp->ms_group == mg); in metaslab_group_sort_impl()
1374 avl_remove(&mg->mg_metaslab_tree, msp); in metaslab_group_sort_impl()
1376 avl_add(&mg->mg_metaslab_tree, msp); in metaslab_group_sort_impl()
1381 metaslab_group_sort(metaslab_group_t *mg, metaslab_t *msp, uint64_t weight) in metaslab_group_sort() argument
1390 mutex_enter(&mg->mg_lock); in metaslab_group_sort()
1391 metaslab_group_sort_impl(mg, msp, weight); in metaslab_group_sort()
1392 mutex_exit(&mg->mg_lock); in metaslab_group_sort()
1402 metaslab_group_fragmentation(metaslab_group_t *mg) in metaslab_group_fragmentation() argument
1404 vdev_t *vd = mg->mg_vd; in metaslab_group_fragmentation()
1412 if (msp->ms_group != mg) in metaslab_group_fragmentation()
2842 metaslab_init(metaslab_group_t *mg, uint64_t id, uint64_t object, in metaslab_init() argument
2845 vdev_t *vd = mg->mg_vd; in metaslab_init()
2923 metaslab_group_add(mg, ms); in metaslab_init()
2937 metaslab_space_update(vd, mg->mg_class, in metaslab_init()
2983 metaslab_group_t *mg = msp->ms_group; in metaslab_fini() local
2984 vdev_t *vd = mg->mg_vd; in metaslab_fini()
2989 metaslab_group_remove(mg, msp); in metaslab_fini()
3000 metaslab_space_update(vd, mg->mg_class, in metaslab_fini()
3182 metaslab_group_t *mg = msp->ms_group; in metaslab_space_weight() local
3183 vdev_t *vd = mg->mg_vd; in metaslab_space_weight()
3342 metaslab_group_t *mg = msp->ms_group; in metaslab_segment_weight() local
3344 uint8_t shift = mg->mg_vd->vdev_ashift; in metaslab_segment_weight()
3500 metaslab_activate_allocator(metaslab_group_t *mg, metaslab_t *msp, in metaslab_activate_allocator() argument
3503 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator]; in metaslab_activate_allocator()
3513 metaslab_group_sort(mg, msp, msp->ms_weight | in metaslab_activate_allocator()
3521 mutex_enter(&mg->mg_lock); in metaslab_activate_allocator()
3523 mutex_exit(&mg->mg_lock); in metaslab_activate_allocator()
3534 metaslab_group_sort_impl(mg, msp, in metaslab_activate_allocator()
3536 mutex_exit(&mg->mg_lock); in metaslab_activate_allocator()
3619 metaslab_passivate_allocator(metaslab_group_t *mg, metaslab_t *msp, in metaslab_passivate_allocator() argument
3626 metaslab_group_sort(mg, msp, weight); in metaslab_passivate_allocator()
3630 mutex_enter(&mg->mg_lock); in metaslab_passivate_allocator()
3631 ASSERT3P(msp->ms_group, ==, mg); in metaslab_passivate_allocator()
3633 ASSERT3U(msp->ms_allocator, <, mg->mg_class->mc_spa->spa_alloc_count); in metaslab_passivate_allocator()
3635 metaslab_group_allocator_t *mga = &mg->mg_allocator[msp->ms_allocator]; in metaslab_passivate_allocator()
3646 metaslab_group_sort_impl(mg, msp, weight); in metaslab_passivate_allocator()
3647 mutex_exit(&mg->mg_lock); in metaslab_passivate_allocator()
3730 metaslab_group_preload(metaslab_group_t *mg) in metaslab_group_preload() argument
3732 spa_t *spa = mg->mg_vd->vdev_spa; in metaslab_group_preload()
3734 avl_tree_t *t = &mg->mg_metaslab_tree; in metaslab_group_preload()
3740 mutex_enter(&mg->mg_lock); in metaslab_group_preload()
3746 ASSERT3P(msp->ms_group, ==, mg); in metaslab_group_preload()
3762 mutex_exit(&mg->mg_lock); in metaslab_group_preload()
4033 metaslab_group_t *mg = msp->ms_group; in metaslab_flush_update() local
4034 spa_t *spa = mg->mg_vd->vdev_spa; in metaslab_flush_update()
4102 metaslab_group_t *mg = msp->ms_group; in metaslab_flush() local
4109 metaslab_group_histogram_verify(mg); in metaslab_flush()
4110 metaslab_class_histogram_verify(mg->mg_class); in metaslab_flush()
4111 metaslab_group_histogram_remove(mg, msp); in metaslab_flush()
4124 metaslab_group_histogram_add(mg, msp); in metaslab_flush()
4125 metaslab_group_histogram_verify(mg); in metaslab_flush()
4126 metaslab_class_histogram_verify(mg->mg_class); in metaslab_flush()
4192 metaslab_group_t *mg = msp->ms_group; in metaslab_sync() local
4193 vdev_t *vd = mg->mg_vd; in metaslab_sync()
4303 metaslab_group_histogram_verify(mg); in metaslab_sync()
4304 metaslab_class_histogram_verify(mg->mg_class); in metaslab_sync()
4305 metaslab_group_histogram_remove(mg, msp); in metaslab_sync()
4423 metaslab_group_histogram_add(mg, msp); in metaslab_sync()
4424 metaslab_group_histogram_verify(mg); in metaslab_sync()
4425 metaslab_class_histogram_verify(mg->mg_class); in metaslab_sync()
4492 metaslab_group_t *mg = msp->ms_group; in metaslab_sync_done() local
4493 vdev_t *vd = mg->mg_vd; in metaslab_sync_done()
4505 metaslab_space_update(vd, mg->mg_class, 0, 0, msp->ms_size); in metaslab_sync_done()
4534 metaslab_space_update(vd, mg->mg_class, alloc_delta + defer_delta, in metaslab_sync_done()
4601 mutex_enter(&mg->mg_lock); in metaslab_sync_done()
4602 mg->mg_ms_ready++; in metaslab_sync_done()
4603 mutex_exit(&mg->mg_lock); in metaslab_sync_done()
4622 metaslab_sync_reassess(metaslab_group_t *mg) in metaslab_sync_reassess() argument
4624 spa_t *spa = mg->mg_class->mc_spa; in metaslab_sync_reassess()
4627 mg->mg_fragmentation = metaslab_group_fragmentation(mg); in metaslab_sync_reassess()
4628 metaslab_group_alloc_update(mg); in metaslab_sync_reassess()
4637 if (mg->mg_activation_count > 0) { in metaslab_sync_reassess()
4638 metaslab_group_preload(mg); in metaslab_sync_reassess()
4674 metaslab_trace_add(zio_alloc_list_t *zal, metaslab_group_t *mg, in metaslab_trace_add() argument
4704 mat->mat_mg = mg; in metaslab_trace_add()
4766 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg; in metaslab_group_alloc_increment() local
4767 if (!mg->mg_class->mc_alloc_throttle_enabled) in metaslab_group_alloc_increment()
4770 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator]; in metaslab_group_alloc_increment()
4792 metaslab_group_t *mg = vdev_lookup_top(spa, vdev)->vdev_mg; in metaslab_group_alloc_decrement() local
4793 if (!mg->mg_class->mc_alloc_throttle_enabled) in metaslab_group_alloc_decrement()
4796 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator]; in metaslab_group_alloc_decrement()
4816 metaslab_group_t *mg = msp->ms_group; in metaslab_block_alloc() local
4817 vdev_t *vd = mg->mg_vd; in metaslab_block_alloc()
4826 vdev_dirty(mg->mg_vd, VDD_METASLAB, msp, txg); in metaslab_block_alloc()
4857 find_valid_metaslab(metaslab_group_t *mg, uint64_t activation_weight, in find_valid_metaslab() argument
4863 avl_tree_t *t = &mg->mg_metaslab_tree; in find_valid_metaslab()
4879 metaslab_trace_add(zal, mg, msp, asize, d, in find_valid_metaslab()
4957 metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal, in metaslab_group_alloc() argument
4968 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) { in metaslab_group_alloc()
4971 DVA_GET_VDEV(&dva[i]) == mg->mg_vd->vdev_id) { in metaslab_group_alloc()
4980 if (allocator >= mg->mg_ms_ready / 3) in metaslab_group_alloc()
4982 metaslab_group_allocator_t *mga = &mg->mg_allocator[allocator]; in metaslab_group_alloc()
4984 ASSERT3U(mg->mg_vd->vdev_ms_count, >=, 2); in metaslab_group_alloc()
5001 mutex_enter(&mg->mg_lock); in metaslab_group_alloc()
5034 msp = find_valid_metaslab(mg, activation_weight, dva, d, in metaslab_group_alloc()
5039 mutex_exit(&mg->mg_lock); in metaslab_group_alloc()
5143 metaslab_trace_add(zal, mg, msp, asize, d, in metaslab_group_alloc()
5156 metaslab_trace_add(zal, mg, msp, asize, d, in metaslab_group_alloc()
5165 metaslab_trace_add(zal, mg, msp, asize, d, in metaslab_group_alloc()
5179 metaslab_trace_add(zal, mg, msp, *actual_asize, d, in metaslab_group_alloc()
5187 metaslab_trace_add(zal, mg, msp, asize, d, offset, allocator); in metaslab_group_alloc()
5245 metaslab_group_sort(mg, msp, weight); in metaslab_group_alloc()
5262 metaslab_trace_add(zal, mg, NULL, asize, d, in metaslab_group_alloc()
5264 if (asize <= vdev_get_min_alloc(mg->mg_vd)) { in metaslab_group_alloc()
5272 mg->mg_no_free_space = B_TRUE; in metaslab_group_alloc()
5279 metaslab_group_allocatable(spa_t *spa, metaslab_group_t *mg, uint64_t psize, in metaslab_group_allocatable() argument
5282 metaslab_class_t *mc = mg->mg_class; in metaslab_group_allocatable()
5283 vdev_t *vd = mg->mg_vd; in metaslab_group_allocatable()
5295 metaslab_trace_add(zal, mg, NULL, psize, d, in metaslab_group_allocatable()
5304 if (!GANG_ALLOCATION(flags) && (mg->mg_no_free_space || in metaslab_group_allocatable()
5305 (!mg->mg_allocatable && mc->mc_alloc_groups > 0))) { in metaslab_group_allocatable()
5306 metaslab_trace_add(zal, mg, NULL, psize, d, in metaslab_group_allocatable()
5317 metaslab_trace_add(zal, mg, NULL, psize, d, in metaslab_group_allocatable()
5332 metaslab_group_t *mg = NULL, *rotor; in metaslab_alloc_dva_range() local
5383 mg = vdev_get_mg(vd, mc); in metaslab_alloc_dva_range()
5385 if (mg == NULL && d != 0) { in metaslab_alloc_dva_range()
5387 mg = vdev_get_mg(vd, mc)->mg_next; in metaslab_alloc_dva_range()
5389 if (mg == NULL || mg->mg_class != mc || mg->mg_activation_count <= 0) { in metaslab_alloc_dva_range()
5391 mg = mca->mca_rotor; in metaslab_alloc_dva_range()
5394 rotor = mg; in metaslab_alloc_dva_range()
5397 ASSERT(mg->mg_activation_count == 1); in metaslab_alloc_dva_range()
5398 ASSERT(mg->mg_class == mc); in metaslab_alloc_dva_range()
5400 if (!metaslab_group_allocatable(spa, mg, psize, d, flags, in metaslab_alloc_dva_range()
5404 vd = mg->mg_vd; in metaslab_alloc_dva_range()
5410 uint64_t offset = metaslab_group_alloc(mg, zal, asize, in metaslab_alloc_dva_range()
5418 metaslab_class_rotate(mg, allocator, psize, B_TRUE); in metaslab_alloc_dva_range()
5428 metaslab_class_rotate(mg, allocator, psize, B_FALSE); in metaslab_alloc_dva_range()
5429 } while ((mg = mg->mg_next) != rotor); in metaslab_alloc_dva_range()
6185 metaslab_group_disable_wait(metaslab_group_t *mg) in metaslab_group_disable_wait() argument
6187 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock)); in metaslab_group_disable_wait()
6188 while (mg->mg_disabled_updating) { in metaslab_group_disable_wait()
6189 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock); in metaslab_group_disable_wait()
6194 metaslab_group_disabled_increment(metaslab_group_t *mg) in metaslab_group_disabled_increment() argument
6196 ASSERT(MUTEX_HELD(&mg->mg_ms_disabled_lock)); in metaslab_group_disabled_increment()
6197 ASSERT(mg->mg_disabled_updating); in metaslab_group_disabled_increment()
6199 while (mg->mg_ms_disabled >= max_disabled_ms) { in metaslab_group_disabled_increment()
6200 cv_wait(&mg->mg_ms_disabled_cv, &mg->mg_ms_disabled_lock); in metaslab_group_disabled_increment()
6202 mg->mg_ms_disabled++; in metaslab_group_disabled_increment()
6203 ASSERT3U(mg->mg_ms_disabled, <=, max_disabled_ms); in metaslab_group_disabled_increment()
6216 metaslab_group_t *mg = msp->ms_group; in metaslab_disable() local
6218 mutex_enter(&mg->mg_ms_disabled_lock); in metaslab_disable()
6229 metaslab_group_disable_wait(mg); in metaslab_disable()
6230 mg->mg_disabled_updating = B_TRUE; in metaslab_disable()
6232 metaslab_group_disabled_increment(mg); in metaslab_disable()
6238 mg->mg_disabled_updating = B_FALSE; in metaslab_disable()
6239 cv_broadcast(&mg->mg_ms_disabled_cv); in metaslab_disable()
6240 mutex_exit(&mg->mg_ms_disabled_lock); in metaslab_disable()
6246 metaslab_group_t *mg = msp->ms_group; in metaslab_enable() local
6247 spa_t *spa = mg->mg_vd->vdev_spa; in metaslab_enable()
6257 mutex_enter(&mg->mg_ms_disabled_lock); in metaslab_enable()
6260 mg->mg_ms_disabled--; in metaslab_enable()
6261 cv_broadcast(&mg->mg_ms_disabled_cv); in metaslab_enable()
6266 mutex_exit(&mg->mg_ms_disabled_lock); in metaslab_enable()