return (err);
}
- void
- dmu_recv_abort_cleanup(dmu_recv_cookie_t *drc)
- {
- if (drc->drc_newfs || drc->drc_real_ds != drc->drc_logical_ds) {
- /*
- * online incremental or new fs: destroy the fs (which
- * may be a clone) that we created
- */
- (void) dsl_dataset_destroy(drc->drc_real_ds, dmu_recv_tag);
- if (drc->drc_real_ds != drc->drc_logical_ds)
- dsl_dataset_rele(drc->drc_logical_ds, dmu_recv_tag);
- } else {
- /*
- * offline incremental: rollback to most recent snapshot.
- */
- (void) dsl_dataset_rollback(drc->drc_real_ds, DMU_OST_NONE);
- dsl_dataset_disown(drc->drc_real_ds, dmu_recv_tag);
- }
- }
-
+/*
+ * Compute checksum of drr_begin record
+ */
+static void
+dmu_recv_stream_cksum(dmu_recv_cookie_t *drc, struct restorearg *ra)
+{
+ dmu_replay_record_t *drr;
+
+ drr = kmem_zalloc(sizeof (dmu_replay_record_t), KM_SLEEP);
+
+ drr->drr_type = DRR_BEGIN;
+ drr->drr_u.drr_begin = *drc->drc_drrb;
+ if (ra->byteswap) {
+ fletcher_4_incremental_byteswap(drr,
+ sizeof (dmu_replay_record_t), &(ra->cksum));
+ } else {
+ fletcher_4_incremental_native(drr,
+ sizeof (dmu_replay_record_t), &(ra->cksum));
+ }
+ kmem_free(drr, sizeof (dmu_replay_record_t));
+}
+
/*
* NB: callers *must* call dmu_recv_end() if this succeeds.
*/