mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
libzfs: add v2 iterator interfaces
f6a0dac84modified the zfs_iter_* functions to take a new "flags" parameter, and introduced a variety of flags to ask the kernel to limit the results in various ways, reducing the amount of work the caller needed to do to filter out things they didn't need. Unfortunately this change broke the ABI for existing clients (read: older versions of the `zfs` program), and was reverted399b98198.dc95911d2reintroduced the original patch, with the understanding that a backwards-compatible fix would be made before the 2.2 release branch was tagged. This commit is that fix. This introduces zfs_iter_*_v2 functions that have the new flags argument, and reverts the existing functions to not have the flags parameter, as they were before. The old functions are now reimplemented in terms of the new, with flags set to 0. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: George Wilson <george.wilson@delphix.com> Original-patch-by: George Wilson <george.wilson@delphix.com> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Sponsored-by: Klara, Inc. Closes #14597
This commit is contained in:
+79
-23
@@ -339,14 +339,21 @@
|
||||
<elf-symbol name='zfs_is_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_isnumber' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_bookmarks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_bookmarks_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_children' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_children_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_dependents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_dependents_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_filesystems' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_filesystems_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_mounted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_root' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapshots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapshots_sorted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapshots_sorted_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapshots_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapspec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_iter_snapspec_v2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_mod_supported' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_mount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
<elf-symbol name='zfs_mount_at' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
|
||||
@@ -2261,18 +2268,31 @@
|
||||
<return type-id='9c313c2d'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_children' mangled-name='zfs_iter_children' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_children'>
|
||||
<parameter type-id='9200a744'/>
|
||||
<parameter type-id='95e97e5e'/>
|
||||
<parameter type-id='d8e49ab9'/>
|
||||
<parameter type-id='eaa32e2f'/>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_children_v2' mangled-name='zfs_iter_children_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_children_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_dependents' mangled-name='zfs_iter_dependents' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_dependents'>
|
||||
<parameter type-id='9200a744'/>
|
||||
<parameter type-id='95e97e5e'/>
|
||||
<parameter type-id='c19b74c3'/>
|
||||
<parameter type-id='d8e49ab9'/>
|
||||
<parameter type-id='eaa32e2f'/>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='c19b74c3' name='allowrecursion'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_dependents_v2' mangled-name='zfs_iter_dependents_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_dependents_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='c19b74c3' name='allowrecursion'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_mounted' mangled-name='zfs_iter_mounted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_mounted'>
|
||||
@@ -3305,10 +3325,16 @@
|
||||
<return type-id='80f4b756'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_filesystems' mangled-name='zfs_iter_filesystems' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems'>
|
||||
<parameter type-id='9200a744'/>
|
||||
<parameter type-id='95e97e5e'/>
|
||||
<parameter type-id='d8e49ab9'/>
|
||||
<parameter type-id='eaa32e2f'/>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_filesystems_v2' mangled-name='zfs_iter_filesystems_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_filesystems_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_parent_name' mangled-name='zfs_parent_name' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_parent_name'>
|
||||
@@ -3882,19 +3908,34 @@
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapshots' mangled-name='zfs_iter_snapshots' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots'>
|
||||
<parameter type-id='9200a744'/>
|
||||
<parameter type-id='95e97e5e'/>
|
||||
<parameter type-id='d8e49ab9'/>
|
||||
<parameter type-id='eaa32e2f'/>
|
||||
<parameter type-id='9c313c2d'/>
|
||||
<parameter type-id='9c313c2d'/>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='c19b74c3' name='simple'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<parameter type-id='9c313c2d' name='min_txg'/>
|
||||
<parameter type-id='9c313c2d' name='max_txg'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapshots_v2' mangled-name='zfs_iter_snapshots_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<parameter type-id='9c313c2d' name='min_txg'/>
|
||||
<parameter type-id='9c313c2d' name='max_txg'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_bookmarks' mangled-name='zfs_iter_bookmarks' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_bookmarks'>
|
||||
<parameter type-id='9200a744'/>
|
||||
<parameter type-id='95e97e5e'/>
|
||||
<parameter type-id='d8e49ab9'/>
|
||||
<parameter type-id='eaa32e2f'/>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_bookmarks_v2' mangled-name='zfs_iter_bookmarks_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_bookmarks_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_destroy_snaps_nvl_os' mangled-name='zfs_destroy_snaps_nvl_os' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_destroy_snaps_nvl_os'>
|
||||
@@ -5091,6 +5132,14 @@
|
||||
<return type-id='9200a744'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapshots_sorted' mangled-name='zfs_iter_snapshots_sorted' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots_sorted'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='d8e49ab9' name='callback'/>
|
||||
<parameter type-id='eaa32e2f' name='data'/>
|
||||
<parameter type-id='9c313c2d' name='min_txg'/>
|
||||
<parameter type-id='9c313c2d' name='max_txg'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapshots_sorted_v2' mangled-name='zfs_iter_snapshots_sorted_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapshots_sorted_v2'>
|
||||
<parameter type-id='9200a744' name='zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='d8e49ab9' name='callback'/>
|
||||
@@ -5100,6 +5149,13 @@
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapspec' mangled-name='zfs_iter_snapspec' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapspec'>
|
||||
<parameter type-id='9200a744' name='fs_zhp'/>
|
||||
<parameter type-id='80f4b756' name='spec_orig'/>
|
||||
<parameter type-id='d8e49ab9' name='func'/>
|
||||
<parameter type-id='eaa32e2f' name='arg'/>
|
||||
<return type-id='95e97e5e'/>
|
||||
</function-decl>
|
||||
<function-decl name='zfs_iter_snapspec_v2' mangled-name='zfs_iter_snapspec_v2' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zfs_iter_snapspec_v2'>
|
||||
<parameter type-id='9200a744' name='fs_zhp'/>
|
||||
<parameter type-id='95e97e5e' name='flags'/>
|
||||
<parameter type-id='80f4b756' name='spec_orig'/>
|
||||
|
||||
@@ -552,7 +552,7 @@ change_one(zfs_handle_t *zhp, void *data)
|
||||
}
|
||||
|
||||
if (!clp->cl_alldependents)
|
||||
ret = zfs_iter_children(zhp, 0, change_one, data);
|
||||
ret = zfs_iter_children_v2(zhp, 0, change_one, data);
|
||||
|
||||
/*
|
||||
* If we added the handle to the changelist, we will re-use it
|
||||
@@ -721,11 +721,12 @@ changelist_gather(zfs_handle_t *zhp, zfs_prop_t prop, int gather_flags,
|
||||
return (NULL);
|
||||
}
|
||||
} else if (clp->cl_alldependents) {
|
||||
if (zfs_iter_dependents(zhp, 0, B_TRUE, change_one, clp) != 0) {
|
||||
if (zfs_iter_dependents_v2(zhp, 0, B_TRUE, change_one,
|
||||
clp) != 0) {
|
||||
changelist_free(clp);
|
||||
return (NULL);
|
||||
}
|
||||
} else if (zfs_iter_children(zhp, 0, change_one, clp) != 0) {
|
||||
} else if (zfs_iter_children_v2(zhp, 0, change_one, clp) != 0) {
|
||||
changelist_free(clp);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@@ -1226,7 +1226,7 @@ load_keys_cb(zfs_handle_t *zhp, void *arg)
|
||||
cb->cb_numfailed++;
|
||||
|
||||
out:
|
||||
(void) zfs_iter_filesystems(zhp, 0, load_keys_cb, cb);
|
||||
(void) zfs_iter_filesystems_v2(zhp, 0, load_keys_cb, cb);
|
||||
zfs_close(zhp);
|
||||
|
||||
/* always return 0, since this function is best effort */
|
||||
|
||||
@@ -757,7 +757,7 @@ zfs_open(libzfs_handle_t *hdl, const char *path, int types)
|
||||
* Iterate bookmarks to find the right one.
|
||||
*/
|
||||
errno = 0;
|
||||
if ((zfs_iter_bookmarks(pzhp, 0, zfs_open_bookmarks_cb,
|
||||
if ((zfs_iter_bookmarks_v2(pzhp, 0, zfs_open_bookmarks_cb,
|
||||
&cb_data) == 0) && (cb_data.zhp == NULL)) {
|
||||
(void) zfs_error(hdl, EZFS_NOENT, errbuf);
|
||||
zfs_close(pzhp);
|
||||
@@ -2476,7 +2476,7 @@ get_clones_cb(zfs_handle_t *zhp, void *arg)
|
||||
}
|
||||
|
||||
out:
|
||||
(void) zfs_iter_children(zhp, 0, get_clones_cb, gca);
|
||||
(void) zfs_iter_children_v2(zhp, 0, get_clones_cb, gca);
|
||||
zfs_close(zhp);
|
||||
return (0);
|
||||
}
|
||||
@@ -3925,7 +3925,7 @@ zfs_check_snap_cb(zfs_handle_t *zhp, void *arg)
|
||||
if (lzc_exists(name))
|
||||
fnvlist_add_boolean(dd->nvl, name);
|
||||
|
||||
rv = zfs_iter_filesystems(zhp, 0, zfs_check_snap_cb, dd);
|
||||
rv = zfs_iter_filesystems_v2(zhp, 0, zfs_check_snap_cb, dd);
|
||||
zfs_close(zhp);
|
||||
return (rv);
|
||||
}
|
||||
@@ -4163,7 +4163,7 @@ zfs_snapshot_cb(zfs_handle_t *zhp, void *arg)
|
||||
|
||||
fnvlist_add_boolean(sd->sd_nvl, name);
|
||||
|
||||
rv = zfs_iter_filesystems(zhp, 0, zfs_snapshot_cb, sd);
|
||||
rv = zfs_iter_filesystems_v2(zhp, 0, zfs_snapshot_cb, sd);
|
||||
}
|
||||
zfs_close(zhp);
|
||||
|
||||
@@ -4340,7 +4340,7 @@ rollback_destroy(zfs_handle_t *zhp, void *data)
|
||||
rollback_data_t *cbp = data;
|
||||
|
||||
if (zfs_prop_get_int(zhp, ZFS_PROP_CREATETXG) > cbp->cb_create) {
|
||||
cbp->cb_error |= zfs_iter_dependents(zhp, 0, B_FALSE,
|
||||
cbp->cb_error |= zfs_iter_dependents_v2(zhp, 0, B_FALSE,
|
||||
rollback_destroy_dependent, cbp);
|
||||
|
||||
cbp->cb_error |= zfs_destroy(zhp, B_FALSE);
|
||||
@@ -4380,10 +4380,10 @@ zfs_rollback(zfs_handle_t *zhp, zfs_handle_t *snap, boolean_t force)
|
||||
if (cb.cb_create > 0)
|
||||
min_txg = cb.cb_create;
|
||||
|
||||
(void) zfs_iter_snapshots(zhp, 0, rollback_destroy, &cb,
|
||||
(void) zfs_iter_snapshots_v2(zhp, 0, rollback_destroy, &cb,
|
||||
min_txg, 0);
|
||||
|
||||
(void) zfs_iter_bookmarks(zhp, 0, rollback_destroy, &cb);
|
||||
(void) zfs_iter_bookmarks_v2(zhp, 0, rollback_destroy, &cb);
|
||||
|
||||
if (cb.cb_error)
|
||||
return (-1);
|
||||
@@ -4964,7 +4964,7 @@ zfs_hold_one(zfs_handle_t *zhp, void *arg)
|
||||
fnvlist_add_string(ha->nvl, name, ha->tag);
|
||||
|
||||
if (ha->recursive)
|
||||
rv = zfs_iter_filesystems(zhp, 0, zfs_hold_one, ha);
|
||||
rv = zfs_iter_filesystems_v2(zhp, 0, zfs_hold_one, ha);
|
||||
zfs_close(zhp);
|
||||
return (rv);
|
||||
}
|
||||
@@ -5095,7 +5095,7 @@ zfs_release_one(zfs_handle_t *zhp, void *arg)
|
||||
}
|
||||
|
||||
if (ha->recursive)
|
||||
rv = zfs_iter_filesystems(zhp, 0, zfs_release_one, ha);
|
||||
rv = zfs_iter_filesystems_v2(zhp, 0, zfs_release_one, ha);
|
||||
zfs_close(zhp);
|
||||
return (rv);
|
||||
}
|
||||
|
||||
+62
-13
@@ -103,7 +103,14 @@ top:
|
||||
* Iterate over all child filesystems
|
||||
*/
|
||||
int
|
||||
zfs_iter_filesystems(zfs_handle_t *zhp, int flags, zfs_iter_f func, void *data)
|
||||
zfs_iter_filesystems(zfs_handle_t *zhp, zfs_iter_f func, void *data)
|
||||
{
|
||||
return (zfs_iter_filesystems_v2(zhp, 0, func, data));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_filesystems_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func,
|
||||
void *data)
|
||||
{
|
||||
zfs_cmd_t zc = {"\0"};
|
||||
zfs_handle_t *nzhp;
|
||||
@@ -143,7 +150,15 @@ zfs_iter_filesystems(zfs_handle_t *zhp, int flags, zfs_iter_f func, void *data)
|
||||
* Iterate over all snapshots
|
||||
*/
|
||||
int
|
||||
zfs_iter_snapshots(zfs_handle_t *zhp, int flags, zfs_iter_f func,
|
||||
zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func,
|
||||
void *data, uint64_t min_txg, uint64_t max_txg)
|
||||
{
|
||||
return (zfs_iter_snapshots_v2(zhp, simple ? ZFS_ITER_SIMPLE : 0, func,
|
||||
data, min_txg, max_txg));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_snapshots_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func,
|
||||
void *data, uint64_t min_txg, uint64_t max_txg)
|
||||
{
|
||||
zfs_cmd_t zc = {"\0"};
|
||||
@@ -197,7 +212,13 @@ zfs_iter_snapshots(zfs_handle_t *zhp, int flags, zfs_iter_f func,
|
||||
* Iterate over all bookmarks
|
||||
*/
|
||||
int
|
||||
zfs_iter_bookmarks(zfs_handle_t *zhp, int flags __maybe_unused,
|
||||
zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data)
|
||||
{
|
||||
return (zfs_iter_bookmarks_v2(zhp, 0, func, data));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_bookmarks_v2(zfs_handle_t *zhp, int flags __maybe_unused,
|
||||
zfs_iter_f func, void *data)
|
||||
{
|
||||
zfs_handle_t *nzhp;
|
||||
@@ -305,7 +326,15 @@ zfs_snapshot_compare(const void *larg, const void *rarg)
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_snapshots_sorted(zfs_handle_t *zhp, int flags, zfs_iter_f callback,
|
||||
zfs_iter_snapshots_sorted(zfs_handle_t *zhp, zfs_iter_f callback,
|
||||
void *data, uint64_t min_txg, uint64_t max_txg)
|
||||
{
|
||||
return (zfs_iter_snapshots_sorted_v2(zhp, 0, callback, data,
|
||||
min_txg, max_txg));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_snapshots_sorted_v2(zfs_handle_t *zhp, int flags, zfs_iter_f callback,
|
||||
void *data, uint64_t min_txg, uint64_t max_txg)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -316,7 +345,7 @@ zfs_iter_snapshots_sorted(zfs_handle_t *zhp, int flags, zfs_iter_f callback,
|
||||
avl_create(&avl, zfs_snapshot_compare,
|
||||
sizeof (zfs_node_t), offsetof(zfs_node_t, zn_avlnode));
|
||||
|
||||
ret = zfs_iter_snapshots(zhp, flags, zfs_sort_snaps, &avl, min_txg,
|
||||
ret = zfs_iter_snapshots_v2(zhp, flags, zfs_sort_snaps, &avl, min_txg,
|
||||
max_txg);
|
||||
|
||||
for (node = avl_first(&avl); node != NULL; node = AVL_NEXT(&avl, node))
|
||||
@@ -379,7 +408,14 @@ snapspec_cb(zfs_handle_t *zhp, void *arg)
|
||||
* return ENOENT at the end.
|
||||
*/
|
||||
int
|
||||
zfs_iter_snapspec(zfs_handle_t *fs_zhp, int flags, const char *spec_orig,
|
||||
zfs_iter_snapspec(zfs_handle_t *fs_zhp, const char *spec_orig,
|
||||
zfs_iter_f func, void *arg)
|
||||
{
|
||||
return (zfs_iter_snapspec_v2(fs_zhp, 0, spec_orig, func, arg));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_snapspec_v2(zfs_handle_t *fs_zhp, int flags, const char *spec_orig,
|
||||
zfs_iter_f func, void *arg)
|
||||
{
|
||||
char *buf, *comma_separated, *cp;
|
||||
@@ -419,7 +455,7 @@ zfs_iter_snapspec(zfs_handle_t *fs_zhp, int flags, const char *spec_orig,
|
||||
}
|
||||
}
|
||||
|
||||
err = zfs_iter_snapshots_sorted(fs_zhp, flags,
|
||||
err = zfs_iter_snapshots_sorted_v2(fs_zhp, flags,
|
||||
snapspec_cb, &ssa, 0, 0);
|
||||
if (ret == 0)
|
||||
ret = err;
|
||||
@@ -456,14 +492,20 @@ zfs_iter_snapspec(zfs_handle_t *fs_zhp, int flags, const char *spec_orig,
|
||||
* and as close as possible.
|
||||
*/
|
||||
int
|
||||
zfs_iter_children(zfs_handle_t *zhp, int flags, zfs_iter_f func, void *data)
|
||||
zfs_iter_children(zfs_handle_t *zhp, zfs_iter_f func, void *data)
|
||||
{
|
||||
return (zfs_iter_children_v2(zhp, 0, func, data));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_children_v2(zfs_handle_t *zhp, int flags, zfs_iter_f func, void *data)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if ((ret = zfs_iter_snapshots(zhp, flags, func, data, 0, 0)) != 0)
|
||||
if ((ret = zfs_iter_snapshots_v2(zhp, flags, func, data, 0, 0)) != 0)
|
||||
return (ret);
|
||||
|
||||
return (zfs_iter_filesystems(zhp, flags, func, data));
|
||||
return (zfs_iter_filesystems_v2(zhp, flags, func, data));
|
||||
}
|
||||
|
||||
|
||||
@@ -524,10 +566,10 @@ iter_dependents_cb(zfs_handle_t *zhp, void *arg)
|
||||
isf.zhp = zhp;
|
||||
isf.next = ida->stack;
|
||||
ida->stack = &isf;
|
||||
err = zfs_iter_filesystems(zhp, ida->flags,
|
||||
err = zfs_iter_filesystems_v2(zhp, ida->flags,
|
||||
iter_dependents_cb, ida);
|
||||
if (err == 0)
|
||||
err = zfs_iter_snapshots(zhp, ida->flags,
|
||||
err = zfs_iter_snapshots_v2(zhp, ida->flags,
|
||||
iter_dependents_cb, ida, 0, 0);
|
||||
ida->stack = isf.next;
|
||||
}
|
||||
@@ -541,7 +583,14 @@ iter_dependents_cb(zfs_handle_t *zhp, void *arg)
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_dependents(zfs_handle_t *zhp, int flags, boolean_t allowrecursion,
|
||||
zfs_iter_dependents(zfs_handle_t *zhp, boolean_t allowrecursion,
|
||||
zfs_iter_f func, void *data)
|
||||
{
|
||||
return (zfs_iter_dependents_v2(zhp, 0, allowrecursion, func, data));
|
||||
}
|
||||
|
||||
int
|
||||
zfs_iter_dependents_v2(zfs_handle_t *zhp, int flags, boolean_t allowrecursion,
|
||||
zfs_iter_f func, void *data)
|
||||
{
|
||||
iter_dependents_arg_t ida;
|
||||
|
||||
@@ -940,7 +940,7 @@ zfs_iter_cb(zfs_handle_t *zhp, void *data)
|
||||
}
|
||||
|
||||
libzfs_add_handle(cbp, zhp);
|
||||
if (zfs_iter_filesystems(zhp, 0, zfs_iter_cb, cbp) != 0) {
|
||||
if (zfs_iter_filesystems_v2(zhp, 0, zfs_iter_cb, cbp) != 0) {
|
||||
zfs_close(zhp);
|
||||
return (-1);
|
||||
}
|
||||
@@ -1289,7 +1289,7 @@ zpool_enable_datasets(zpool_handle_t *zhp, const char *mntopts, int flags)
|
||||
* over all child filesystems.
|
||||
*/
|
||||
libzfs_add_handle(&cb, zfsp);
|
||||
if (zfs_iter_filesystems(zfsp, 0, zfs_iter_cb, &cb) != 0)
|
||||
if (zfs_iter_filesystems_v2(zfsp, 0, zfs_iter_cb, &cb) != 0)
|
||||
goto out;
|
||||
|
||||
/*
|
||||
|
||||
@@ -288,7 +288,7 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv);
|
||||
|
||||
/*
|
||||
* Collect guid, valid props, optionally holds, etc. of a snapshot.
|
||||
* This interface is intended for use as a zfs_iter_snapshots_sorted visitor.
|
||||
* This interface is intended for use as a zfs_iter_snapshots_v2_sorted visitor.
|
||||
*/
|
||||
static int
|
||||
send_iterate_snap(zfs_handle_t *zhp, void *arg)
|
||||
@@ -619,8 +619,8 @@ send_iterate_fs(zfs_handle_t *zhp, void *arg)
|
||||
min_txg = fromsnap_txg;
|
||||
if (!sd->replicate && tosnap_txg != 0)
|
||||
max_txg = tosnap_txg;
|
||||
(void) zfs_iter_snapshots_sorted(zhp, 0, send_iterate_snap, sd,
|
||||
min_txg, max_txg);
|
||||
(void) zfs_iter_snapshots_sorted_v2(zhp, 0, send_iterate_snap,
|
||||
sd, min_txg, max_txg);
|
||||
} else {
|
||||
char snapname[MAXPATHLEN] = { 0 };
|
||||
zfs_handle_t *snap;
|
||||
@@ -662,7 +662,7 @@ send_iterate_fs(zfs_handle_t *zhp, void *arg)
|
||||
|
||||
/* Iterate over children. */
|
||||
if (sd->recursive)
|
||||
rv = zfs_iter_filesystems(zhp, 0, send_iterate_fs, sd);
|
||||
rv = zfs_iter_filesystems_v2(zhp, 0, send_iterate_fs, sd);
|
||||
|
||||
out:
|
||||
/* Restore saved fields. */
|
||||
@@ -1083,7 +1083,7 @@ send_print_verbose(FILE *fout, const char *tosnap, const char *fromsnap,
|
||||
|
||||
/*
|
||||
* Send a single filesystem snapshot, updating the send dump data.
|
||||
* This interface is intended for use as a zfs_iter_snapshots_sorted visitor.
|
||||
* This interface is intended for use as a zfs_iter_snapshots_v2_sorted visitor.
|
||||
*/
|
||||
static int
|
||||
dump_snapshot(zfs_handle_t *zhp, void *arg)
|
||||
@@ -1293,7 +1293,7 @@ dump_filesystem(zfs_handle_t *zhp, send_dump_data_t *sdd)
|
||||
zhp->zfs_name, sdd->tosnap);
|
||||
}
|
||||
}
|
||||
rv = zfs_iter_snapshots_sorted(zhp, 0, dump_snapshot, sdd,
|
||||
rv = zfs_iter_snapshots_sorted_v2(zhp, 0, dump_snapshot, sdd,
|
||||
min_txg, max_txg);
|
||||
} else {
|
||||
char snapname[MAXPATHLEN] = { 0 };
|
||||
@@ -3162,9 +3162,9 @@ guid_to_name_cb(zfs_handle_t *zhp, void *arg)
|
||||
return (EEXIST);
|
||||
}
|
||||
|
||||
err = zfs_iter_children(zhp, 0, guid_to_name_cb, gtnd);
|
||||
err = zfs_iter_children_v2(zhp, 0, guid_to_name_cb, gtnd);
|
||||
if (err != EEXIST && gtnd->bookmark_ok)
|
||||
err = zfs_iter_bookmarks(zhp, 0, guid_to_name_cb, gtnd);
|
||||
err = zfs_iter_bookmarks_v2(zhp, 0, guid_to_name_cb, gtnd);
|
||||
zfs_close(zhp);
|
||||
return (err);
|
||||
}
|
||||
@@ -3218,9 +3218,10 @@ guid_to_name_redact_snaps(libzfs_handle_t *hdl, const char *parent,
|
||||
continue;
|
||||
int err = guid_to_name_cb(zfs_handle_dup(zhp), >nd);
|
||||
if (err != EEXIST)
|
||||
err = zfs_iter_children(zhp, 0, guid_to_name_cb, >nd);
|
||||
err = zfs_iter_children_v2(zhp, 0, guid_to_name_cb,
|
||||
>nd);
|
||||
if (err != EEXIST && bookmark_ok)
|
||||
err = zfs_iter_bookmarks(zhp, 0, guid_to_name_cb,
|
||||
err = zfs_iter_bookmarks_v2(zhp, 0, guid_to_name_cb,
|
||||
>nd);
|
||||
zfs_close(zhp);
|
||||
if (err == EEXIST)
|
||||
|
||||
Reference in New Issue
Block a user