mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Add spa _os() hooks
Add hooks for when spa is created, exported, activated and deactivated. Used by macOS to attach iokit, and lock kext as busy (to stop unloads). Userland, Linux, and, FreeBSD have empty stubs. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Jorgen Lundman <lundman@lundman.net> Closes #12801
This commit is contained in:
parent
2fb52853dc
commit
4759342a5e
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user