Print this page
2605 want to resume interrupted zfs send
Reviewed by: George Wilson <george.wilson@delphix.com>
Reviewed by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Richard Elling <Richard.Elling@RichardElling.com>
Reviewed by: Xin Li <delphij@freebsd.org>
Reviewed by: Arne Jansen <sensille@gmx.net>
Approved by: Dan McDonald <danmcd@omniti.com>
re #13850 Refactor ZFS config discovery IOCs to libzfs_core patterns

@@ -18,11 +18,11 @@
  *
  * CDDL HEADER END
  */
 
 /*
- * Copyright 2012 Nexenta Systems, Inc.  All rights reserved.
+ * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2012, 2014 by Delphix. All rights reserved.
  * Copyright 2015 Joyent, Inc.
  */
 

@@ -100,11 +100,11 @@
 #include "systable.h"
 #include "proto.h"
 
 void    show_sigset(private_t *, long, const char *);
 void    show_ioctl(private_t *, int, long);
-void    show_zfs_ioc(private_t *, long);
+void    show_zfs_ioc(private_t *, long, int);
 
 static void
 mk_ctime(char *str, size_t maxsize, time_t value)
 {
         (void) strftime(str, maxsize, "%b %e %H:%M:%S %Z %Y",

@@ -1486,11 +1486,11 @@
                 show_audio_info(pri, offset);
                 break;
 
         default:
                 if ((code & ~0xff) == ZFS_IOC) {
-                        show_zfs_ioc(pri, offset);
+                        show_zfs_ioc(pri, offset, err);
                         break;
                 }
 
                 if (code & IOC_INOUT) {
                         const char *str = ioctldatastruct(code);

@@ -4872,11 +4872,11 @@
                 break;
         }
 }
 
 void
-show_zfs_ioc(private_t *pri, long addr)
+show_zfs_ioc(private_t *pri, long addr, int err)
 {
         static const zfs_share_t zero_share = {0};
         static const dmu_objset_stats_t zero_objstats = {0};
         static const struct drr_begin zero_drrbegin = {0};
         static const zinject_record_t zero_injectrec = {0};

@@ -4907,14 +4907,19 @@
                 (void) printf("    nvlist_src:\n");
                 show_packed_nvlist(pri, zc.zc_nvlist_src,
                     zc.zc_nvlist_src_size);
         }
         if (zc.zc_nvlist_dst_size) {
+                if (zc.zc_nvlist_dst_filled) {
                 (void) printf("    nvlist_dst:\n");
                 show_packed_nvlist(pri, zc.zc_nvlist_dst,
                     zc.zc_nvlist_dst_size);
+                } else if (err == ENOMEM) {
+                        (void) printf("    nvlist_dst_size: %llu\n",
+                            (u_longlong_t)zc.zc_nvlist_dst_size);
         }
+        }
         if (zc.zc_cookie != 0) {
                 (void) printf("    zc_cookie=%llu\n",
                     (u_longlong_t)zc.zc_cookie);
         }
         if (zc.zc_objset_type != 0) {