svn commit: r318831 - head/cddl/contrib/opensolaris/lib/libzfs/common
Andriy Gapon
avg at FreeBSD.org
Wed May 24 22:30:23 UTC 2017
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 at 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 <pcd at delphix.com>
Reviewed by: Matt Ahrens <mahrens at delphix.com>
Approved by: Dan McDonald <danmcd at omniti.com>
Author: Andriy Gapon <avg at 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.
More information about the svn-src-head
mailing list