Print this page
6328 Fix cstyle errors in zfs codebase (fix studio)
6328 Fix cstyle errors in zfs codebase
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Alex Reece <alex@delphix.com>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Reviewed by: Jorgen Lundman <lundman@lundman.net>
Approved by: Robert Mustacchi <rm@joyent.com>
NEX-3669 Faults for fans that don't exist
Reviewed by: Jeffry Molanus <jeffry.molanus@nexenta.com>
NEX-3891 Hide the snapshots that belong to in-kernel autosnap-service
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Alek Pinchuk <alek@nexenta.com>
re #13487 libscf: memory leaks in scf_simple_app_props_get()
re #13485 libzfs: memory leak in iter_dependents_cb()
*** 136,180 ****
/*
* Iterate over all snapshots
*/
int
! zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func,
! void *data)
{
zfs_cmd_t zc = { 0 };
- zfs_handle_t *nzhp;
int ret;
if (zhp->zfs_type == ZFS_TYPE_SNAPSHOT ||
! zhp->zfs_type == ZFS_TYPE_BOOKMARK)
return (0);
zc.zc_simple = simple;
if (zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0) != 0)
return (-1);
while ((ret = zfs_do_list_ioctl(zhp, ZFS_IOC_SNAPSHOT_LIST_NEXT,
&zc)) == 0) {
if (simple)
nzhp = make_dataset_simple_handle_zc(zhp, &zc);
else
nzhp = make_dataset_handle_zc(zhp->zfs_hdl, &zc);
if (nzhp == NULL)
continue;
if ((ret = func(nzhp, data)) != 0) {
zcmd_free_nvlists(&zc);
return (ret);
}
}
zcmd_free_nvlists(&zc);
return ((ret < 0) ? ret : 0);
}
/*
* Iterate over all bookmarks
*/
int
zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data)
{
--- 136,212 ----
/*
* Iterate over all snapshots
*/
int
! zfs_iter_snapshots_internal(zfs_handle_t *zhp, boolean_t simple,
! zfs_iter_f func, void *data, boolean_t autosnaps)
{
zfs_cmd_t zc = { 0 };
int ret;
if (zhp->zfs_type == ZFS_TYPE_SNAPSHOT ||
! zhp->zfs_type == ZFS_TYPE_BOOKMARK ||
! zhp->zfs_type == ZFS_TYPE_AUTOSNAP)
return (0);
zc.zc_simple = simple;
if (zcmd_alloc_dst_nvlist(zhp->zfs_hdl, &zc, 0) != 0)
return (-1);
+
while ((ret = zfs_do_list_ioctl(zhp, ZFS_IOC_SNAPSHOT_LIST_NEXT,
&zc)) == 0) {
+ zfs_handle_t *nzhp;
if (simple)
nzhp = make_dataset_simple_handle_zc(zhp, &zc);
else
nzhp = make_dataset_handle_zc(zhp->zfs_hdl, &zc);
if (nzhp == NULL)
continue;
+ if (autosnaps) {
+ if (zfs_get_type(nzhp) != ZFS_TYPE_AUTOSNAP) {
+ zfs_close(nzhp);
+ continue;
+ }
+ } else {
+ if (zfs_get_type(nzhp) != ZFS_TYPE_SNAPSHOT) {
+ zfs_close(nzhp);
+ continue;
+ }
+ }
+
if ((ret = func(nzhp, data)) != 0) {
zcmd_free_nvlists(&zc);
return (ret);
}
}
+
zcmd_free_nvlists(&zc);
return ((ret < 0) ? ret : 0);
}
/*
+ * Iterate over all snapshots
+ */
+ int
+ zfs_iter_snapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func,
+ void *data)
+ {
+ return (zfs_iter_snapshots_internal(zhp, simple, func, data, B_FALSE));
+ }
+
+ int
+ zfs_iter_autosnapshots(zfs_handle_t *zhp, boolean_t simple, zfs_iter_f func,
+ void *data)
+ {
+ return (zfs_iter_snapshots_internal(zhp, simple, func, data, B_TRUE));
+ }
+
+ /*
* Iterate over all bookmarks
*/
int
zfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data)
{
*** 181,191 ****
zfs_handle_t *nzhp;
nvlist_t *props = NULL;
nvlist_t *bmarks = NULL;
int err;
! if ((zfs_get_type(zhp) & (ZFS_TYPE_SNAPSHOT | ZFS_TYPE_BOOKMARK)) != 0)
return (0);
/* Setup the requested properties nvlist. */
props = fnvlist_alloc();
fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_GUID));
--- 213,224 ----
zfs_handle_t *nzhp;
nvlist_t *props = NULL;
nvlist_t *bmarks = NULL;
int err;
! if ((zfs_get_type(zhp) & (ZFS_TYPE_SNAPSHOT |
! ZFS_TYPE_BOOKMARK | ZFS_TYPE_AUTOSNAP)) != 0)
return (0);
/* Setup the requested properties nvlist. */
props = fnvlist_alloc();
fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_GUID));
*** 422,445 ****
return (ret);
}
/*
* Iterate over all children, snapshots and filesystems
- * Process snapshots before filesystems because they are nearer the input
- * handle: this is extremely important when used with zfs_iter_f functions
- * looking for data, following the logic that we would like to find it as soon
- * and as close as possible.
*/
int
zfs_iter_children(zfs_handle_t *zhp, zfs_iter_f func, void *data)
{
int ret;
! if ((ret = zfs_iter_snapshots(zhp, B_FALSE, func, data)) != 0)
return (ret);
! return (zfs_iter_filesystems(zhp, func, data));
}
typedef struct iter_stack_frame {
struct iter_stack_frame *next;
--- 455,474 ----
return (ret);
}
/*
* Iterate over all children, snapshots and filesystems
*/
int
zfs_iter_children(zfs_handle_t *zhp, zfs_iter_f func, void *data)
{
int ret;
! if ((ret = zfs_iter_filesystems(zhp, func, data)) != 0)
return (ret);
! return (zfs_iter_snapshots(zhp, B_FALSE, func, data));
}
typedef struct iter_stack_frame {
struct iter_stack_frame *next;
*** 500,509 ****
--- 529,544 ----
err = zfs_iter_filesystems(zhp, iter_dependents_cb, ida);
if (err == 0) {
err = zfs_iter_snapshots(zhp, B_FALSE,
iter_dependents_cb, ida);
}
+
+ if (err == 0) {
+ err = zfs_iter_autosnapshots(zhp, B_FALSE,
+ iter_dependents_cb, ida);
+ }
+
ida->stack = isf.next;
}
if (!first && err == 0)
err = ida->func(zhp, ida->data);