mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-27 04:32:16 +03:00
Retire zfs_autoimport_disable kmod option
Back in 2014 the zfs_autoimport_disable module option was added to control whether the kmods should load the pool configs from the cache file on module load. The default value since that time has been for the kernel to not process the cache file. Detecting and importing pools during boot is now controlled outside of the kmod on both Linux and FreeBSD. By all accounts this has been working well and we can remove this dormant code on the kernel side. The spa_config_load() function is has been moved to userspace, it is now only used by libzpool. Additionally, the spa_boot_init() hook which was used by FreeBSD now looks to be used and was removed. Reviewed-by: Rob Norris <robn@despairlabs.com> Reviewed-by: Alexander Motin <alexander.motin@TrueNAS.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #17618
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
#include <sys/processor.h>
|
||||
#include <sys/rrwlock.h>
|
||||
#include <sys/spa.h>
|
||||
#include <sys/spa_impl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/systeminfo.h>
|
||||
#include <sys/time.h>
|
||||
@@ -811,6 +812,79 @@ umem_out_of_memory(void)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static void
|
||||
spa_config_load(void)
|
||||
{
|
||||
void *buf = NULL;
|
||||
nvlist_t *nvlist, *child;
|
||||
nvpair_t *nvpair;
|
||||
char *pathname;
|
||||
zfs_file_t *fp;
|
||||
zfs_file_attr_t zfa;
|
||||
uint64_t fsize;
|
||||
int err;
|
||||
|
||||
/*
|
||||
* Open the configuration file.
|
||||
*/
|
||||
pathname = kmem_alloc(MAXPATHLEN, KM_SLEEP);
|
||||
|
||||
(void) snprintf(pathname, MAXPATHLEN, "%s", spa_config_path);
|
||||
|
||||
err = zfs_file_open(pathname, O_RDONLY, 0, &fp);
|
||||
if (err)
|
||||
err = zfs_file_open(ZPOOL_CACHE_BOOT, O_RDONLY, 0, &fp);
|
||||
|
||||
kmem_free(pathname, MAXPATHLEN);
|
||||
|
||||
if (err)
|
||||
return;
|
||||
|
||||
if (zfs_file_getattr(fp, &zfa))
|
||||
goto out;
|
||||
|
||||
fsize = zfa.zfa_size;
|
||||
buf = kmem_alloc(fsize, KM_SLEEP);
|
||||
|
||||
/*
|
||||
* Read the nvlist from the file.
|
||||
*/
|
||||
if (zfs_file_read(fp, buf, fsize, NULL) < 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Unpack the nvlist.
|
||||
*/
|
||||
if (nvlist_unpack(buf, fsize, &nvlist, KM_SLEEP) != 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
* Iterate over all elements in the nvlist, creating a new spa_t for
|
||||
* each one with the specified configuration.
|
||||
*/
|
||||
mutex_enter(&spa_namespace_lock);
|
||||
nvpair = NULL;
|
||||
while ((nvpair = nvlist_next_nvpair(nvlist, nvpair)) != NULL) {
|
||||
if (nvpair_type(nvpair) != DATA_TYPE_NVLIST)
|
||||
continue;
|
||||
|
||||
child = fnvpair_value_nvlist(nvpair);
|
||||
|
||||
if (spa_lookup(nvpair_name(nvpair)) != NULL)
|
||||
continue;
|
||||
(void) spa_add(nvpair_name(nvpair), child, NULL);
|
||||
}
|
||||
mutex_exit(&spa_namespace_lock);
|
||||
|
||||
nvlist_free(nvlist);
|
||||
|
||||
out:
|
||||
if (buf != NULL)
|
||||
kmem_free(buf, fsize);
|
||||
|
||||
zfs_file_close(fp);
|
||||
}
|
||||
|
||||
void
|
||||
kernel_init(int mode)
|
||||
{
|
||||
@@ -835,6 +909,7 @@ kernel_init(int mode)
|
||||
zstd_init();
|
||||
|
||||
spa_init((spa_mode_t)mode);
|
||||
spa_config_load();
|
||||
|
||||
fletcher_4_init();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user