diff options
author | Tom Erickson <Tom.Erickson@Sun.COM> | 2010-03-22 19:32:07 -0700 |
---|---|---|
committer | Tom Erickson <Tom.Erickson@Sun.COM> | 2010-03-22 19:32:07 -0700 |
commit | 83d7f9fe6bbb3e281a1ca55fdc5d1ec82ecc3e70 (patch) | |
tree | 781aae2f88cc8259ef3a05d604029ebbeeebde19 /usr/src/lib/libzfs/common/libzfs_sendrecv.c | |
parent | 007a36532dce1d38a2504164c2191710645ba2b9 (diff) | |
download | illumos-gate-83d7f9fe6bbb3e281a1ca55fdc5d1ec82ecc3e70.tar.gz |
6931963 zfs_receive_004_neg test regression results in no reported error for invalid incremental receive
6917437 fmd utilities (fmadm, fmstat) hang on error injection followed by fmd restart
Diffstat (limited to 'usr/src/lib/libzfs/common/libzfs_sendrecv.c')
-rw-r--r-- | usr/src/lib/libzfs/common/libzfs_sendrecv.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/usr/src/lib/libzfs/common/libzfs_sendrecv.c b/usr/src/lib/libzfs/common/libzfs_sendrecv.c index d36a79daf3..b4f972560e 100644 --- a/usr/src/lib/libzfs/common/libzfs_sendrecv.c +++ b/usr/src/lib/libzfs/common/libzfs_sendrecv.c @@ -2426,7 +2426,14 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const char *tosnap, (void) strcpy(zc.zc_name, zc.zc_value); *strchr(zc.zc_name, '@') = '\0'; - if (!zfs_dataset_exists(hdl, zc.zc_name, ZFS_TYPE_DATASET)) { + /* + * If the exact receive path was specified and this is the + * topmost path in the stream, then if the fs does not exist we + * should look no further. + */ + if ((flags.isprefix || (*(chopprefix = drrb->drr_toname + + strlen(sendfs)) != '\0' && *chopprefix != '@')) && + !zfs_dataset_exists(hdl, zc.zc_name, ZFS_TYPE_DATASET)) { char snap[ZFS_MAXNAMELEN]; (void) strcpy(snap, strchr(zc.zc_value, '@')); if (guid_to_name(hdl, tosnap, drrb->drr_fromguid, @@ -2844,7 +2851,7 @@ zfs_receive_impl(libzfs_handle_t *hdl, const char *tosnap, recvflags_t flags, return (zfs_receive_one(hdl, infd, tosnap, flags, &drr, &drr_noswap, sendfs, stream_nv, stream_avl, top_zfs)); - } else { /* must be DMU_COMPOUNDSTREAM */ + } else { assert(DMU_GET_STREAM_HDRTYPE(drrb->drr_versioninfo) == DMU_COMPOUNDSTREAM); return (zfs_receive_package(hdl, infd, tosnap, flags, |