]> git.proxmox.com Git - mirror_zfs.git/commitdiff
libzfs_sendrecv: Style pass on dump_ioctl
authorRyan Moeller <freqlabs@FreeBSD.org>
Thu, 5 Aug 2021 15:29:24 +0000 (15:29 +0000)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 2 Feb 2022 01:02:50 +0000 (17:02 -0800)
* Don't bother building a debug nvlist if we can't return it.
* Save errno after ioctl failure in case snprintf clobbers it.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <freqlabs@FreeBSD.org>
Closes #12967

lib/libzfs/libzfs_sendrecv.c

index 1ef5fe4f45c942bb70e06d3f23e3c82effcb1073..fea49e3ab1b3acf0609ac1c7a1a6b426acf06b9e 100644 (file)
@@ -795,23 +795,26 @@ dump_ioctl(zfs_handle_t *zhp, const char *fromsnap, uint64_t fromsnap_obj,
        zc.zc_fromobj = fromsnap_obj;
        zc.zc_flags = flags;
 
-       thisdbg = fnvlist_alloc();
-       if (fromsnap && fromsnap[0] != '\0') {
-               fnvlist_add_string(thisdbg, "fromsnap", fromsnap);
+       if (debugnv != NULL) {
+               thisdbg = fnvlist_alloc();
+               if (fromsnap != NULL && fromsnap[0] != '\0')
+                       fnvlist_add_string(thisdbg, "fromsnap", fromsnap);
        }
 
        if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_SEND, &zc) != 0) {
                char errbuf[1024];
+               int error = errno;
+
                (void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,
                    "warning: cannot send '%s'"), zhp->zfs_name);
 
-               fnvlist_add_uint64(thisdbg, "error", errno);
-               if (debugnv) {
+               if (debugnv != NULL) {
+                       fnvlist_add_uint64(thisdbg, "error", error);
                        fnvlist_add_nvlist(debugnv, zhp->zfs_name, thisdbg);
+                       fnvlist_free(thisdbg);
                }
-               fnvlist_free(thisdbg);
 
-               switch (errno) {
+               switch (error) {
                case EXDEV:
                        zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
                            "not an earlier snapshot from the same fs"));
@@ -851,9 +854,10 @@ dump_ioctl(zfs_handle_t *zhp, const char *fromsnap, uint64_t fromsnap_obj,
                }
        }
 
-       if (debugnv)
+       if (debugnv != NULL) {
                fnvlist_add_nvlist(debugnv, zhp->zfs_name, thisdbg);
-       fnvlist_free(thisdbg);
+               fnvlist_free(thisdbg);
+       }
 
        return (0);
 }