Add zpool_disable_datasets_os() / zfs_unmount_os()
zpool_disable_datasets_os(): macOS needs to do a bunch of work to kick everything off zvols. zfs_unmount_os(): This allows us to unmount any zvols that may be mounted. Like with zfs destroy foo/vol Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: John Kennedy <john.kennedy@delphix.com> Signed-off-by: Jorgen Lundman <lundman@lundman.net> Closes #12436
This commit is contained in:
parent
3b89d9518d
commit
3e8d5e4ff3
|
@ -839,7 +839,7 @@ _LIBZFS_H int zfs_unmount(zfs_handle_t *, const char *, int);
|
|||
_LIBZFS_H int zfs_unmountall(zfs_handle_t *, int);
|
||||
_LIBZFS_H int zfs_mount_delegation_check(void);
|
||||
|
||||
#if defined(__linux__)
|
||||
#if defined(__linux__) || defined(__APPLE__)
|
||||
_LIBZFS_H int zfs_parse_mount_options(char *mntopts, unsigned long *mntflags,
|
||||
unsigned long *zfsflags, int sloppy, char *badopt, char *mtabopt);
|
||||
_LIBZFS_H void zfs_adjust_mount_options(zfs_handle_t *zhp, const char *mntpoint,
|
||||
|
@ -930,6 +930,8 @@ _LIBZFS_H int zfs_smb_acl_rename(libzfs_handle_t *, char *, char *, char *,
|
|||
*/
|
||||
_LIBZFS_H int zpool_enable_datasets(zpool_handle_t *, const char *, int);
|
||||
_LIBZFS_H int zpool_disable_datasets(zpool_handle_t *, boolean_t);
|
||||
_LIBZFS_H void zpool_disable_datasets_os(zpool_handle_t *, boolean_t);
|
||||
_LIBZFS_H void zpool_disable_volume_os(const char *);
|
||||
|
||||
/*
|
||||
* Parse a features file for -o compatibility
|
||||
|
|
|
@ -230,6 +230,8 @@
|
|||
<elf-symbol name='zpool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_disable_datasets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_disable_datasets_os' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_disable_volume_os' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_discard_checkpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_enable_datasets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zpool_events_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
|
@ -2501,6 +2503,9 @@
|
|||
<function-decl name='qsort' mangled-name='qsort' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='zpool_disable_datasets_os' mangled-name='zpool_disable_datasets_os' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='tpool_dispatch' mangled-name='tpool_dispatch' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
|
@ -2540,6 +2545,9 @@
|
|||
<function-decl name='libzfs_mnttab_remove' mangled-name='libzfs_mnttab_remove' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='zpool_disable_volume_os' mangled-name='zpool_disable_volume_os' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_crypto_get_encryption_root' mangled-name='zfs_crypto_get_encryption_root' visibility='default' binding='global' size-in-bits='64'>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
|
@ -3937,6 +3945,15 @@
|
|||
</function-type>
|
||||
</abi-instr>
|
||||
<abi-instr version='1.0' address-size='64' path='os/linux/libzfs_mount_os.c' comp-dir-path='/home/runner/work/zfs/zfs/lib/libzfs' language='LANG_C99'>
|
||||
<function-decl name='zpool_disable_volume_os' mangled-name='zpool_disable_volume_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_volume_os'>
|
||||
<parameter type-id='type-id-84' name='name'/>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='zpool_disable_datasets_os' mangled-name='zpool_disable_datasets_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zpool_disable_datasets_os'>
|
||||
<parameter type-id='type-id-4' name='zhp'/>
|
||||
<parameter type-id='type-id-9' name='force'/>
|
||||
<return type-id='type-id-1'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_mount_delegation_check' mangled-name='zfs_mount_delegation_check' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_mount_delegation_check'>
|
||||
<return type-id='type-id-2'/>
|
||||
</function-decl>
|
||||
|
|
|
@ -672,6 +672,8 @@ zfs_unmount(zfs_handle_t *zhp, const char *mountpoint, int flags)
|
|||
}
|
||||
}
|
||||
|
||||
zpool_disable_volume_os(zhp->zfs_name);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
@ -1637,6 +1639,8 @@ zpool_disable_datasets(zpool_handle_t *zhp, boolean_t force)
|
|||
remove_mountpoint(sets[i].dataset);
|
||||
}
|
||||
|
||||
zpool_disable_datasets_os(zhp, force);
|
||||
|
||||
ret = 0;
|
||||
out:
|
||||
(void) fclose(mnttab);
|
||||
|
|
|
@ -133,3 +133,15 @@ zfs_mount_delegation_check(void)
|
|||
{
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Called from the tail end of zpool_disable_datasets() */
|
||||
void
|
||||
zpool_disable_datasets_os(zpool_handle_t *zhp, boolean_t force)
|
||||
{
|
||||
}
|
||||
|
||||
/* Called from the tail end of zfs_unmount() */
|
||||
void
|
||||
zpool_disable_volume_os(const char *name)
|
||||
{
|
||||
}
|
||||
|
|
|
@ -411,3 +411,15 @@ zfs_mount_delegation_check(void)
|
|||
{
|
||||
return ((geteuid() != 0) ? EACCES : 0);
|
||||
}
|
||||
|
||||
/* Called from the tail end of zpool_disable_datasets() */
|
||||
void
|
||||
zpool_disable_datasets_os(zpool_handle_t *zhp, boolean_t force)
|
||||
{
|
||||
}
|
||||
|
||||
/* Called from the tail end of zfs_unmount() */
|
||||
void
|
||||
zpool_disable_volume_os(const char *name)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue