--- a/usr/src/uts/common/fs/zfs/dmu_send.c Wed Feb 14 19:54:59 2007 -0800
+++ b/usr/src/uts/common/fs/zfs/dmu_send.c Wed Feb 14 20:19:07 2007 -0800
@@ -265,6 +265,7 @@
if (err) {
if (err == EINTR && ba.err)
err = ba.err;
+ kmem_free(drr, sizeof (dmu_replay_record_t));
return (err);
}
@@ -272,8 +273,10 @@
drr->drr_type = DRR_END;
drr->drr_u.drr_end.drr_checksum = ba.zc;
- if (dump_bytes(&ba, drr, sizeof (dmu_replay_record_t)))
+ if (dump_bytes(&ba, drr, sizeof (dmu_replay_record_t))) {
+ kmem_free(drr, sizeof (dmu_replay_record_t));
return (ba.err);
+ }
kmem_free(drr, sizeof (dmu_replay_record_t));
@@ -794,6 +797,7 @@
ds->ds_prev->ds_phys->ds_guid !=
drrb->drr_fromguid) {
dsl_dataset_close(ds, DS_MODE_EXCLUSIVE, FTAG);
+ kmem_free(ra.buf, ra.bufsize);
return (ENODEV);
}
(void) dsl_dataset_rollback(ds);