diff --git a/include/sys/spa.h b/include/sys/spa.h index 896b0f956..2ce84c21c 100644 --- a/include/sys/spa.h +++ b/include/sys/spa.h @@ -1183,6 +1183,11 @@ extern int spa_wait_tag(const char *name, zpool_wait_activity_t activity, extern void spa_notify_waiters(spa_t *spa); extern void spa_wake_waiters(spa_t *spa); +extern void spa_import_os(spa_t *spa); +extern void spa_export_os(spa_t *spa); +extern void spa_activate_os(spa_t *spa); +extern void spa_deactivate_os(spa_t *spa); + /* module param call functions */ int param_set_deadman_ziotime(ZFS_MODULE_PARAM_ARGS); int param_set_deadman_synctime(ZFS_MODULE_PARAM_ARGS); diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c index 41e0e7815..8a588e5a9 100644 --- a/lib/libzpool/kernel.c +++ b/lib/libzpool/kernel.c @@ -1405,3 +1405,27 @@ zfsvfs_update_fromname(const char *oldname, const char *newname) { (void) oldname, (void) newname; } + +void +spa_import_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_export_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_activate_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_deactivate_os(spa_t *spa) +{ + (void) spa; +} diff --git a/module/os/freebsd/zfs/spa_os.c b/module/os/freebsd/zfs/spa_os.c index c8c833426..6ebb4c285 100644 --- a/module/os/freebsd/zfs/spa_os.c +++ b/module/os/freebsd/zfs/spa_os.c @@ -268,3 +268,27 @@ spa_history_zone(void) { return ("freebsd"); } + +void +spa_import_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_export_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_activate_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_deactivate_os(spa_t *spa) +{ + (void) spa; +} diff --git a/module/os/linux/zfs/spa_misc_os.c b/module/os/linux/zfs/spa_misc_os.c index 5672cd6d5..cbdc0f350 100644 --- a/module/os/linux/zfs/spa_misc_os.c +++ b/module/os/linux/zfs/spa_misc_os.c @@ -108,3 +108,27 @@ spa_history_zone(void) { return ("linux"); } + +void +spa_import_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_export_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_activate_os(spa_t *spa) +{ + (void) spa; +} + +void +spa_deactivate_os(spa_t *spa) +{ + (void) spa; +} diff --git a/module/zfs/spa.c b/module/zfs/spa.c index 647ee17e4..881a7c94e 100644 --- a/module/zfs/spa.c +++ b/module/zfs/spa.c @@ -1315,6 +1315,8 @@ spa_activate(spa_t *spa, spa_mode_t mode) spa_error_entry_compare, sizeof (spa_error_entry_t), offsetof(spa_error_entry_t, se_avl)); + spa_activate_os(spa); + spa_keystore_init(&spa->spa_keystore); /* @@ -1451,6 +1453,9 @@ spa_deactivate(spa_t *spa) thread_join(spa->spa_did); spa->spa_did = 0; } + + spa_deactivate_os(spa); + } /* @@ -6031,6 +6036,8 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props, spa->spa_minref = zfs_refcount_count(&spa->spa_refcount); spa->spa_load_state = SPA_LOAD_NONE; + spa_import_os(spa); + mutex_exit(&spa_namespace_lock); return (0); @@ -6214,6 +6221,8 @@ spa_import(char *pool, nvlist_t *config, nvlist_t *props, uint64_t flags) zvol_create_minors_recursive(pool); + spa_import_os(spa); + return (0); } @@ -6461,6 +6470,8 @@ spa_export_common(const char *pool, int new_state, nvlist_t **oldconfig, } export_spa: + spa_export_os(spa); + if (new_state == POOL_STATE_DESTROYED) spa_event_notify(spa, NULL, NULL, ESC_ZFS_POOL_DESTROY); else if (new_state == POOL_STATE_EXPORTED)