summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2010-01-07 20:10:22 +0000
committerdelphij <delphij@FreeBSD.org>2010-01-07 20:10:22 +0000
commit9524ac9a04e01d096ee0adc93e87bfacf5bcfc56 (patch)
tree87a987f1f92f10a77a10d502ac8140d6d41090f6 /sys
parent41f06dea81abb813f660ca1a0e62636d2549cacd (diff)
downloadFreeBSD-src-9524ac9a04e01d096ee0adc93e87bfacf5bcfc56.zip
FreeBSD-src-9524ac9a04e01d096ee0adc93e87bfacf5bcfc56.tar.gz
Re-apply onnv-gate revisions 7994 and 8986 (corresponds to FreeBSD
revision 200726 and 200727). It looks like that the two revisions were not applied in the right sequence, I found this when comparing with the OpenSolaris code. MFC after: 3 days Reviewed by: mm@
Diffstat (limited to 'sys')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
index 9803265..5c97cd7 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
@@ -847,6 +847,12 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
if (err != 0 && err != ENOENT)
return (EINVAL);
+ if (drro->drr_bonuslen) {
+ data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8));
+ if (ra->err)
+ return (ra->err);
+ }
+
if (err == ENOENT) {
/* currently free, want to be allocated */
tx = dmu_tx_create(os);
@@ -862,7 +868,6 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
dmu_tx_commit(tx);
} else {
/* currently allocated, want to be allocated */
-
err = dmu_object_reclaim(os, drro->drr_object,
drro->drr_type, drro->drr_blksz,
drro->drr_bonustype, drro->drr_bonuslen);
@@ -870,12 +875,6 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
if (err)
return (EINVAL);
- if (drro->drr_bonuslen) {
- data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8));
- if (ra->err)
- return (ra->err);
- }
-
tx = dmu_tx_create(os);
dmu_tx_hold_bonus(tx, drro->drr_object);
err = dmu_tx_assign(tx, TXG_WAIT);
OpenPOWER on IntegriCloud