Lines Matching defs:mc
409 metaslab_class_t *mc;
411 mc = kmem_zalloc(offsetof(metaslab_class_t,
414 mc->mc_spa = spa;
415 mc->mc_ops = ops;
416 mutex_init(&mc->mc_lock, NULL, MUTEX_DEFAULT, NULL);
417 multilist_create(&mc->mc_metaslab_txg_list, sizeof (metaslab_t),
420 metaslab_class_allocator_t *mca = &mc->mc_allocator[i];
425 return (mc);
429 metaslab_class_destroy(metaslab_class_t *mc)
431 spa_t *spa = mc->mc_spa;
433 ASSERT(mc->mc_alloc == 0);
434 ASSERT(mc->mc_deferred == 0);
435 ASSERT(mc->mc_space == 0);
436 ASSERT(mc->mc_dspace == 0);
439 metaslab_class_allocator_t *mca = &mc->mc_allocator[i];
443 mutex_destroy(&mc->mc_lock);
444 multilist_destroy(&mc->mc_metaslab_txg_list);
445 kmem_free(mc, offsetof(metaslab_class_t,
450 metaslab_class_validate(metaslab_class_t *mc)
458 ASSERT(spa_config_held(mc->mc_spa, SCL_ALL, RW_READER) ||
459 spa_config_held(mc->mc_spa, SCL_ALL, RW_WRITER));
461 if ((mg = mc->mc_allocator[0].mca_rotor) == NULL)
468 ASSERT3P(mg->mg_class, ==, mc);
470 } while ((mg = mg->mg_next) != mc->mc_allocator[0].mca_rotor);
476 metaslab_class_space_update(metaslab_class_t *mc, int64_t alloc_delta,
479 atomic_add_64(&mc->mc_alloc, alloc_delta);
480 atomic_add_64(&mc->mc_deferred, defer_delta);
481 atomic_add_64(&mc->mc_space, space_delta);
482 atomic_add_64(&mc->mc_dspace, dspace_delta);
486 metaslab_class_get_alloc(metaslab_class_t *mc)
488 return (mc->mc_alloc);
492 metaslab_class_get_deferred(metaslab_class_t *mc)
494 return (mc->mc_deferred);
498 metaslab_class_get_space(metaslab_class_t *mc)
500 return (mc->mc_space);
504 metaslab_class_get_dspace(metaslab_class_t *mc)
506 return (spa_deflate(mc->mc_spa) ? mc->mc_dspace : mc->mc_space);
510 metaslab_class_histogram_verify(metaslab_class_t *mc)
512 spa_t *spa = mc->mc_spa;
523 mutex_enter(&mc->mc_lock);
526 metaslab_group_t *mg = vdev_get_mg(tvd, mc);
533 mg->mg_class != mc) {
538 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
545 VERIFY3U(mc_hist[i], ==, mc->mc_histogram[i]);
548 mutex_exit(&mc->mc_lock);
560 metaslab_class_fragmentation(metaslab_class_t *mc)
562 vdev_t *rvd = mc->mc_spa->spa_root_vdev;
565 spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER);
576 mg->mg_class != mc) {
585 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG);
596 fragmentation /= metaslab_class_get_space(mc);
599 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG);
610 metaslab_class_expandable_space(metaslab_class_t *mc)
612 vdev_t *rvd = mc->mc_spa->spa_root_vdev;
615 spa_config_enter(mc->mc_spa, SCL_VDEV, FTAG, RW_READER);
621 mg->mg_class != mc) {
633 spa_config_exit(mc->mc_spa, SCL_VDEV, FTAG);
638 metaslab_class_evict_old(metaslab_class_t *mc, uint64_t txg)
640 multilist_t *ml = &mc->mc_metaslab_txg_list;
741 metaslab_class_t *mc = mg->mg_class;
747 ASSERT3U(spa_config_held(mc->mc_spa, SCL_ALLOC, RW_READER), ==,
757 mutex_enter(&mc->mc_lock);
769 mc->mc_groups++;
771 ASSERT3U(mc->mc_groups, >, 0);
772 mc->mc_groups--;
804 mc->mc_alloc_groups--;
806 mc->mc_alloc_groups++;
807 mutex_exit(&mc->mc_lock);
832 metaslab_group_create(metaslab_class_t *mc, vdev_t *vd, int allocators)
844 mg->mg_class = mc;
886 metaslab_class_t *mc = mg->mg_class;
887 spa_t *spa = mc->mc_spa;
903 if ((mgprev = mc->mc_allocator[0].mca_rotor) == NULL) {
914 mc->mc_allocator[i].mca_rotor = mg;
928 metaslab_class_t *mc = mg->mg_class;
929 spa_t *spa = mc->mc_spa;
938 ASSERT(mc->mc_allocator[i].mca_rotor != mg);
991 if (mc->mc_allocator[i].mca_rotor == mg)
992 mc->mc_allocator[i].mca_rotor = mgnext;
1062 metaslab_class_t *mc = mg->mg_class;
1070 mutex_enter(&mc->mc_lock);
1073 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1076 mc->mc_histogram[i + ashift] +=
1079 mutex_exit(&mc->mc_lock);
1086 metaslab_class_t *mc = mg->mg_class;
1094 mutex_enter(&mc->mc_lock);
1098 ASSERT3U(mc->mc_histogram[i + ashift], >=,
1101 mc == spa_embedded_log_class(mg->mg_vd->vdev_spa));
1105 mc->mc_histogram[i + ashift] -=
1108 mutex_exit(&mc->mc_lock);
1138 metaslab_class_t *mc = msp->ms_group->mg_class;
1140 multilist_sublist_lock_obj(&mc->mc_metaslab_txg_list, msp);
1226 metaslab_class_t *mc = mg->mg_class;
1234 if ((mc != spa_normal_class(spa) &&
1235 mc != spa_special_class(spa) &&
1236 mc != spa_dedup_class(spa)) ||
1237 mc->mc_groups <= 1)
1257 if (!mc->mc_alloc_throttle_enabled)
1290 if (qdepth < qmax || mc->mc_alloc_groups == 1)
1292 ASSERT3U(mc->mc_alloc_groups, >, 1);
1326 } else if (mc->mc_alloc_groups == 0 || psize == SPA_MINBLOCKSIZE) {
2225 metaslab_potentially_evict(metaslab_class_t *mc)
2233 tries < multilist_get_num_sublists(&mc->mc_metaslab_txg_list) * 2;
2236 &mc->mc_metaslab_txg_list);
2238 multilist_sublist_lock_idx(&mc->mc_metaslab_txg_list, idx);
2244 &mc->mc_metaslab_txg_list, idx));
2246 metaslab_idx_func(&mc->mc_metaslab_txg_list, msp));
2294 (void) mc, (void) zfs_metaslab_mem_limit;
2595 metaslab_class_t *mc = msp->ms_group->mg_class;
2597 multilist_sublist_lock_obj(&mc->mc_metaslab_txg_list, msp);
2663 metaslab_class_t *mc = msp->ms_group->mg_class;
2665 multilist_sublist_lock_obj(&mc->mc_metaslab_txg_list, msp);
2675 metaslab_space_update(vdev_t *vd, metaslab_class_t *mc, int64_t alloc_delta,
2683 metaslab_class_space_update(mc, alloc_delta, defer_delta, space_delta,
3547 metaslab_class_t *mc = msp->ms_group->mg_class;
3548 spa_t *spa = mc->mc_spa;
4652 metaslab_class_t *mc = msp->ms_group->mg_class;
4659 start = mc->mc_ops->msop_alloc(msp, size);
5144 metaslab_alloc_dva(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
5148 metaslab_class_allocator_t *mca = &mc->mc_allocator[allocator];
5202 mg = vdev_get_mg(vd, mc);
5221 if (mg->mg_class != mc || mg->mg_activation_count <= 0)
5273 ASSERT(mg->mg_class == mc);
5300 int64_t mc_free = mc->mc_space - mc->mc_alloc;
5326 ratio = (vs_free * mc->mc_alloc_groups * 100) /
5670 metaslab_class_throttle_reserve(metaslab_class_t *mc, int slots, int allocator,
5673 metaslab_class_allocator_t *mca = &mc->mc_allocator[allocator];
5676 ASSERT(mc->mc_alloc_throttle_enabled);
5698 metaslab_class_throttle_unreserve(metaslab_class_t *mc, int slots,
5701 metaslab_class_allocator_t *mca = &mc->mc_allocator[allocator];
5703 ASSERT(mc->mc_alloc_throttle_enabled);
5750 metaslab_class_t *mc = msp->ms_group->mg_class;
5752 multilist_sublist_lock_obj(&mc->mc_metaslab_txg_list, msp);
5844 metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp,
5857 if (mc->mc_allocator[allocator].mca_rotor == NULL) {
5869 error = metaslab_alloc_dva(spa, mc, psize, dva, d, hintdva,