aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sys/spa.h5
-rw-r--r--lib/libzpool/kernel.c24
-rw-r--r--module/os/freebsd/zfs/spa_os.c24
-rw-r--r--module/os/linux/zfs/spa_misc_os.c24
-rw-r--r--module/zfs/spa.c11
5 files changed, 88 insertions, 0 deletions
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)