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);