uint64_t mc_space; /* total space (alloc + free) */
uint64_t mc_dspace; /* total deflated space */
uint64_t mc_histogram[RANGE_TREE_HISTOGRAM_SIZE];
- kmutex_t mc_fastwrite_lock;
};
/*
mc->mc_spa = spa;
mc->mc_rotor = NULL;
mc->mc_ops = ops;
- mutex_init(&mc->mc_fastwrite_lock, NULL, MUTEX_DEFAULT, NULL);
return (mc);
}
ASSERT(mc->mc_space == 0);
ASSERT(mc->mc_dspace == 0);
- mutex_destroy(&mc->mc_fastwrite_lock);
kmem_free(mc, sizeof (metaslab_class_t));
}
if (psize >= metaslab_gang_bang && (ddi_get_lbolt() & 3) == 0)
return (SET_ERROR(ENOSPC));
- if (flags & METASLAB_FASTWRITE)
- mutex_enter(&mc->mc_fastwrite_lock);
-
/*
* Start at the rotor and loop through all mgs until we find something.
* Note that there's no locking on mc_rotor or mc_aliquot because
if (flags & METASLAB_FASTWRITE) {
atomic_add_64(&vd->vdev_pending_fastwrite,
psize);
- mutex_exit(&mc->mc_fastwrite_lock);
}
return (0);
bzero(&dva[d], sizeof (dva_t));
- if (flags & METASLAB_FASTWRITE)
- mutex_exit(&mc->mc_fastwrite_lock);
-
return (SET_ERROR(ENOSPC));
}