usr/src/uts/common/fs/zfs/dmu_send.c
changeset 3655 bf932d11a0cb
parent 3547 e396e0a440b1
child 4543 12bb2876a62e
--- 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);