Author: avg
Date: Wed May 24 22:30:21 2017
New Revision: 318831
URL: https://svnweb.freebsd.org/changeset/base/318831

Log:
  MFV r316922: 5380 receive of a send -p stream doesn't need to try renaming 
snapshots
  
  illumos/illumos-gate@471a88e499c660844f4590487ce7c4d5a7090294
  
https://github.com/illumos/illumos-gate/commit/471a88e499c660844f4590487ce7c4d5a7090294
  
  https://www.illumos.org/issues/5380
    A stream created with zfs send -p -I contains properties of all snapshots 
of a
    given dataset as opposed to only properties of snapshots in a given range.
    Not only this is suboptimal but the receive code also does not filter
    properties by the range. So, properties of earlier snapshots would be 
updated
    even though the snapshots themselves are not in the stream (just their
    properties).
    Given that modifying the snapshot properties requires a TXG sync and that 
the
    snapshots are updated one by one the described behavior may lead to a sever
    performance penalty.
  
  Reviewed by: Paul Dagnelie <p...@delphix.com>
  Reviewed by: Matt Ahrens <mahr...@delphix.com>
  Approved by: Dan McDonald <dan...@omniti.com>
  Author: Andriy Gapon <a...@freebsd.org>
  MFC after:    3 weeks

Modified:
  head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
Directory Properties:
  head/cddl/contrib/opensolaris/   (props changed)
  head/cddl/contrib/opensolaris/lib/libzfs/   (props changed)

Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
==============================================================================
--- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c   Wed May 
24 22:27:48 2017        (r318830)
+++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c   Wed May 
24 22:30:21 2017        (r318831)
@@ -2800,7 +2800,7 @@ zfs_receive_package(libzfs_handle_t *hdl
                        goto out;
                }
 
-               if (fromsnap != NULL) {
+               if (fromsnap != NULL && recursive) {
                        nvlist_t *renamed = NULL;
                        nvpair_t *pair = NULL;
 
@@ -2827,7 +2827,7 @@ zfs_receive_package(libzfs_handle_t *hdl
                                *strchr(tofs, '@') = '\0';
                        }
 
-                       if (recursive && !flags->dryrun && !flags->nomount) {
+                       if (!flags->dryrun && !flags->nomount) {
                                VERIFY(0 == nvlist_alloc(&renamed,
                                    NV_UNIQUE_NAME, 0));
                        }
@@ -2896,7 +2896,7 @@ zfs_receive_package(libzfs_handle_t *hdl
                anyerr |= error;
        } while (error == 0);
 
-       if (drr->drr_payloadlen != 0 && fromsnap != NULL) {
+       if (drr->drr_payloadlen != 0 && recursive && fromsnap != NULL) {
                /*
                 * Now that we have the fs's they sent us, try the
                 * renames again.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to