mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-24 11:18:52 +03:00
Selectable block allocators
ZFS historically has had several space allocators that were dynamically selectable. While these have been retained in OpenZFS, only a single allocator has been statically compiled in. This patch compiles all allocators for OpenZFS and provides a module parameter to allow for manual selection between them. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Ameer Hamza <ahamza@ixsystems.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Edmund Nadolski <edmund.nadolski@ixsystems.com> Closes #15218
This commit is contained in:
+8
-6
@@ -1295,24 +1295,26 @@ spa_thread(void *arg)
|
||||
}
|
||||
#endif
|
||||
|
||||
extern metaslab_ops_t *metaslab_allocator(spa_t *spa);
|
||||
|
||||
/*
|
||||
* Activate an uninitialized pool.
|
||||
*/
|
||||
static void
|
||||
spa_activate(spa_t *spa, spa_mode_t mode)
|
||||
{
|
||||
metaslab_ops_t *msp = metaslab_allocator(spa);
|
||||
ASSERT(spa->spa_state == POOL_STATE_UNINITIALIZED);
|
||||
|
||||
spa->spa_state = POOL_STATE_ACTIVE;
|
||||
spa->spa_mode = mode;
|
||||
spa->spa_read_spacemaps = spa_mode_readable_spacemaps;
|
||||
|
||||
spa->spa_normal_class = metaslab_class_create(spa, &zfs_metaslab_ops);
|
||||
spa->spa_log_class = metaslab_class_create(spa, &zfs_metaslab_ops);
|
||||
spa->spa_embedded_log_class =
|
||||
metaslab_class_create(spa, &zfs_metaslab_ops);
|
||||
spa->spa_special_class = metaslab_class_create(spa, &zfs_metaslab_ops);
|
||||
spa->spa_dedup_class = metaslab_class_create(spa, &zfs_metaslab_ops);
|
||||
spa->spa_normal_class = metaslab_class_create(spa, msp);
|
||||
spa->spa_log_class = metaslab_class_create(spa, msp);
|
||||
spa->spa_embedded_log_class = metaslab_class_create(spa, msp);
|
||||
spa->spa_special_class = metaslab_class_create(spa, msp);
|
||||
spa->spa_dedup_class = metaslab_class_create(spa, msp);
|
||||
|
||||
/* Try to create a covering process */
|
||||
mutex_enter(&spa->spa_proc_lock);
|
||||
|
||||
Reference in New Issue
Block a user