MFV r316922: 5380 receive of a send -p stream doesn't need to try renaming snapshots
illumos/illumos-gate@471a88e499
471a88e499
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@delphix.com>
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
Author: Andriy Gapon <avg@FreeBSD.org>
MFC after: 3 weeks
This commit is contained in:
parent
075947786b
commit
a992558c50
@ -2800,7 +2800,7 @@ zfs_receive_package(libzfs_handle_t *hdl, int fd, const char *destname,
|
||||
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, int fd, const char *destname,
|
||||
*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, int fd, const char *destname,
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user