svn commit: r364978 - stable/11/cddl/contrib/opensolaris/lib/libzfs/common
Alan Somers
asomers at FreeBSD.org
Sun Aug 30 18:21:55 UTC 2020
Author: asomers
Date: Sun Aug 30 18:21:54 2020
New Revision: 364978
URL: https://svnweb.freebsd.org/changeset/base/364978
Log:
MFC r364412:
zfs: fix EIO accessing dataset after resuming interrupted receive
ZFS unmounts a dataset while receiving into it and remounts it afterwards.
But if ZFS is resuming an incomplete receive, it screws up and ends up with
a dataset that is mounted, but returns EIO for every access. This commit
fixes that condition.
While the vulnerable code also exists in OpenZFS, the problem is not
reproducible there. Apparently OpenZFS doesn't unmount the destination
dataset during receive, like FreeBSD does.
PR: 248606
Reviewed by: mmacy
Sponsored by: Axcient
Differential Revision: https://reviews.freebsd.org/D26034
Modified:
stable/11/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c
==============================================================================
--- stable/11/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Sun Aug 30 17:40:59 2020 (r364977)
+++ stable/11/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c Sun Aug 30 18:21:54 2020 (r364978)
@@ -3415,7 +3415,7 @@ zfs_receive_one(libzfs_handle_t *hdl, int infd, const
}
if (!flags->dryrun && zhp->zfs_type == ZFS_TYPE_FILESYSTEM &&
- stream_wantsnewfs) {
+ (stream_wantsnewfs || resuming)) {
/* We can't do online recv in this case */
clp = changelist_gather(zhp, ZFS_PROP_NAME, 0, 0);
if (clp == NULL) {
More information about the svn-src-stable-11
mailing list