diff options
author | Ryan Moeller <[email protected]> | 2021-07-27 16:18:29 +0000 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2022-02-01 17:02:25 -0800 |
commit | 2b6b7111f4bae3fc84e42568d591669a6d8a1e12 (patch) | |
tree | a0d64aca0236f9503412b25f2ed686503ea77011 /lib/libzfs | |
parent | dd59c422d3b0923b3c17901d556a19b725c338da (diff) |
libzfs_sendrecv: Style pass on send_iterate_prop
* Add a high level comment.
* Move locals closer to point of use.
* Use fnv* routines rather than explicit verification of success.
* Factor out duplicated code by introducing isspacelimit to clarify
behavior.
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Ryan Moeller <[email protected]>
Closes #12967
Diffstat (limited to 'lib/libzfs')
-rw-r--r-- | lib/libzfs/libzfs_sendrecv.c | 44 |
1 files changed, 19 insertions, 25 deletions
diff --git a/lib/libzfs/libzfs_sendrecv.c b/lib/libzfs/libzfs_sendrecv.c index 8e037cde6..d271db303 100644 --- a/lib/libzfs/libzfs_sendrecv.c +++ b/lib/libzfs/libzfs_sendrecv.c @@ -364,21 +364,23 @@ send_iterate_snap(zfs_handle_t *zhp, void *arg) return (0); } +/* + * Collect all valid props from the handle snap into an nvlist. + */ static void send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) { - nvlist_t *props = NULL; - nvpair_t *elem = NULL; + nvlist_t *props; if (received_only) props = zfs_get_recvd_props(zhp); else props = zhp->zfs_props; + nvpair_t *elem = NULL; while ((elem = nvlist_next_nvpair(props, elem)) != NULL) { char *propname = nvpair_name(elem); zfs_prop_t prop = zfs_name_to_prop(propname); - nvlist_t *propnv; if (!zfs_prop_user(propname)) { /* @@ -396,34 +398,26 @@ send_iterate_prop(zfs_handle_t *zhp, boolean_t received_only, nvlist_t *nv) continue; } - verify(nvpair_value_nvlist(elem, &propnv) == 0); - if (prop == ZFS_PROP_QUOTA || prop == ZFS_PROP_RESERVATION || + nvlist_t *propnv = fnvpair_value_nvlist(elem); + + boolean_t isspacelimit = (prop == ZFS_PROP_QUOTA || + prop == ZFS_PROP_RESERVATION || prop == ZFS_PROP_REFQUOTA || - prop == ZFS_PROP_REFRESERVATION) { - char *source; - uint64_t value; - verify(nvlist_lookup_uint64(propnv, - ZPROP_VALUE, &value) == 0); - if (zhp->zfs_type == ZFS_TYPE_SNAPSHOT) + prop == ZFS_PROP_REFRESERVATION); + if (isspacelimit && zhp->zfs_type == ZFS_TYPE_SNAPSHOT) + continue; + + char *source; + if (nvlist_lookup_string(propnv, ZPROP_SOURCE, &source) == 0) { + if (strcmp(source, zhp->zfs_name) != 0 && + strcmp(source, ZPROP_SOURCE_VAL_RECVD) != 0) continue; + } else { /* * May have no source before SPA_VERSION_RECVD_PROPS, * but is still modifiable. */ - if (nvlist_lookup_string(propnv, - ZPROP_SOURCE, &source) == 0) { - if ((strcmp(source, zhp->zfs_name) != 0) && - (strcmp(source, - ZPROP_SOURCE_VAL_RECVD) != 0)) - continue; - } - } else { - char *source; - if (nvlist_lookup_string(propnv, - ZPROP_SOURCE, &source) != 0) - continue; - if ((strcmp(source, zhp->zfs_name) != 0) && - (strcmp(source, ZPROP_SOURCE_VAL_RECVD) != 0)) + if (!isspacelimit) continue; } |