Lines Matching refs:drc

729     nvlist_t *hidden_args, char *origin, dmu_recv_cookie_t *drc)  in dmu_recv_begin()  argument
733 bzero(drc, sizeof (dmu_recv_cookie_t)); in dmu_recv_begin()
734 drc->drc_drr_begin = drr_begin; in dmu_recv_begin()
735 drc->drc_drrb = &drr_begin->drr_u.drr_begin; in dmu_recv_begin()
736 drc->drc_tosnap = tosnap; in dmu_recv_begin()
737 drc->drc_tofs = tofs; in dmu_recv_begin()
738 drc->drc_force = force; in dmu_recv_begin()
739 drc->drc_resumable = resumable; in dmu_recv_begin()
740 drc->drc_cred = CRED(); in dmu_recv_begin()
741 drc->drc_clone = (origin != NULL); in dmu_recv_begin()
743 if (drc->drc_drrb->drr_magic == BSWAP_64(DMU_BACKUP_MAGIC)) { in dmu_recv_begin()
744 drc->drc_byteswap = B_TRUE; in dmu_recv_begin()
746 sizeof (dmu_replay_record_t), &drc->drc_cksum); in dmu_recv_begin()
748 } else if (drc->drc_drrb->drr_magic == DMU_BACKUP_MAGIC) { in dmu_recv_begin()
750 sizeof (dmu_replay_record_t), &drc->drc_cksum); in dmu_recv_begin()
755 if (drc->drc_drrb->drr_flags & DRR_FLAG_SPILL_BLOCK) in dmu_recv_begin()
756 drc->drc_spill = B_TRUE; in dmu_recv_begin()
759 drba.drba_cookie = drc; in dmu_recv_begin()
762 if (DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo) & in dmu_recv_begin()
780 if ((DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo) & in dmu_recv_begin()
782 origin == NULL && drc->drc_drrb->drr_fromguid == 0) { in dmu_recv_begin()
1850 dmu_recv_cleanup_ds(dmu_recv_cookie_t *drc) in dmu_recv_cleanup_ds() argument
1852 dsl_dataset_t *ds = drc->drc_ds; in dmu_recv_cleanup_ds()
1855 dsflags = (drc->drc_raw) ? DS_HOLD_FLAG_NONE : DS_HOLD_FLAG_DECRYPT; in dmu_recv_cleanup_ds()
1867 if (drc->drc_resumable && !BP_IS_HOLE(dsl_dataset_get_blkptr(ds))) { in dmu_recv_cleanup_ds()
2374 dmu_recv_stream(dmu_recv_cookie_t *drc, vnode_t *vp, offset_t *voffp, in dmu_recv_stream() argument
2383 ra.byteswap = drc->drc_byteswap; in dmu_recv_stream()
2384 ra.raw = drc->drc_raw; in dmu_recv_stream()
2385 ra.cksum = drc->drc_cksum; in dmu_recv_stream()
2389 if (dsl_dataset_is_zapified(drc->drc_ds)) { in dmu_recv_stream()
2390 (void) zap_lookup(drc->drc_ds->ds_dir->dd_pool->dp_meta_objset, in dmu_recv_stream()
2391 drc->drc_ds->ds_object, DS_FIELD_RESUME_BYTES, in dmu_recv_stream()
2398 ASSERT3U(DMU_GET_STREAM_HDRTYPE(drc->drc_drrb->drr_versioninfo), ==, in dmu_recv_stream()
2400 ASSERT3U(drc->drc_drrb->drr_type, <, DMU_OST_NUMTYPES); in dmu_recv_stream()
2405 VERIFY0(dmu_objset_from_ds(drc->drc_ds, &ra.os)); in dmu_recv_stream()
2407 ASSERT(dsl_dataset_phys(drc->drc_ds)->ds_flags & DS_FLAG_INCONSISTENT); in dmu_recv_stream()
2409 featureflags = DMU_GET_FEATUREFLAGS(drc->drc_drrb->drr_versioninfo); in dmu_recv_stream()
2447 drc->drc_guid_to_ds_map = rwa.guid_to_ds_map; in dmu_recv_stream()
2450 uint32_t payloadlen = drc->drc_drr_begin->drr_payloadlen; in dmu_recv_stream()
2473 ASSERT(drc->drc_raw); in dmu_recv_stream()
2486 drc->drc_ds->ds_object, drc->drc_fromsnapobj, in dmu_recv_stream()
2487 drc->drc_drrb->drr_type, keynvl, drc->drc_newfs); in dmu_recv_stream()
2492 drc->drc_ivset_guid = 0; in dmu_recv_stream()
2494 &drc->drc_ivset_guid); in dmu_recv_stream()
2496 if (!drc->drc_newfs) in dmu_recv_stream()
2497 drc->drc_keynvl = fnvlist_dup(keynvl); in dmu_recv_stream()
2512 rwa.byteswap = drc->drc_byteswap; in dmu_recv_stream()
2513 rwa.resumable = drc->drc_resumable; in dmu_recv_stream()
2514 rwa.raw = drc->drc_raw; in dmu_recv_stream()
2515 rwa.spill = drc->drc_spill; in dmu_recv_stream()
2516 rwa.os->os_raw_receive = drc->drc_raw; in dmu_recv_stream()
2577 if (drc->drc_clone && drc->drc_drrb->drr_fromguid == 0) { in dmu_recv_stream()
2628 dmu_recv_cleanup_ds(drc); in dmu_recv_stream()
2629 nvlist_free(drc->drc_keynvl); in dmu_recv_stream()
2640 dmu_recv_cookie_t *drc = arg; in dmu_recv_end_check() local
2644 ASSERT3P(drc->drc_ds->ds_owner, ==, dmu_recv_tag); in dmu_recv_end_check()
2646 if (!drc->drc_newfs) { in dmu_recv_end_check()
2649 error = dsl_dataset_hold(dp, drc->drc_tofs, FTAG, &origin_head); in dmu_recv_end_check()
2652 if (drc->drc_force) { in dmu_recv_end_check()
2663 dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) { in dmu_recv_end_check()
2685 if (drc->drc_keynvl != NULL) { in dmu_recv_end_check()
2686 error = dsl_crypto_recv_raw_key_check(drc->drc_ds, in dmu_recv_end_check()
2687 drc->drc_keynvl, tx); in dmu_recv_end_check()
2694 error = dsl_dataset_clone_swap_check_impl(drc->drc_ds, in dmu_recv_end_check()
2695 origin_head, drc->drc_force, drc->drc_owner, tx); in dmu_recv_end_check()
2701 drc->drc_tosnap, tx, B_TRUE, 1, drc->drc_cred); in dmu_recv_end_check()
2706 error = dsl_destroy_head_check_impl(drc->drc_ds, 1); in dmu_recv_end_check()
2708 error = dsl_dataset_snapshot_check_impl(drc->drc_ds, in dmu_recv_end_check()
2709 drc->drc_tosnap, tx, B_TRUE, 1, drc->drc_cred); in dmu_recv_end_check()
2717 dmu_recv_cookie_t *drc = arg; in dmu_recv_end_sync() local
2719 boolean_t encrypted = drc->drc_ds->ds_dir->dd_crypto_obj != 0; in dmu_recv_end_sync()
2721 spa_history_log_internal_ds(drc->drc_ds, "finish receiving", in dmu_recv_end_sync()
2722 tx, "snap=%s", drc->drc_tosnap); in dmu_recv_end_sync()
2723 drc->drc_ds->ds_objset->os_raw_receive = B_FALSE; in dmu_recv_end_sync()
2725 if (!drc->drc_newfs) { in dmu_recv_end_sync()
2728 VERIFY0(dsl_dataset_hold(dp, drc->drc_tofs, FTAG, in dmu_recv_end_sync()
2731 if (drc->drc_force) { in dmu_recv_end_sync()
2740 dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj) { in dmu_recv_end_sync()
2751 if (drc->drc_keynvl != NULL) { in dmu_recv_end_sync()
2752 dsl_crypto_recv_raw_key_sync(drc->drc_ds, in dmu_recv_end_sync()
2753 drc->drc_keynvl, tx); in dmu_recv_end_sync()
2754 nvlist_free(drc->drc_keynvl); in dmu_recv_end_sync()
2755 drc->drc_keynvl = NULL; in dmu_recv_end_sync()
2758 VERIFY3P(drc->drc_ds->ds_prev, ==, origin_head->ds_prev); in dmu_recv_end_sync()
2760 dsl_dataset_clone_swap_sync_impl(drc->drc_ds, in dmu_recv_end_sync()
2763 drc->drc_tosnap, tx); in dmu_recv_end_sync()
2768 drc->drc_drrb->drr_creation_time; in dmu_recv_end_sync()
2770 drc->drc_drrb->drr_toguid; in dmu_recv_end_sync()
2778 drc->drc_newsnapobj = in dmu_recv_end_sync()
2782 dsl_destroy_head_sync_impl(drc->drc_ds, tx); in dmu_recv_end_sync()
2784 if (drc->drc_owner != NULL) in dmu_recv_end_sync()
2785 VERIFY3P(origin_head->ds_owner, ==, drc->drc_owner); in dmu_recv_end_sync()
2787 dsl_dataset_t *ds = drc->drc_ds; in dmu_recv_end_sync()
2789 dsl_dataset_snapshot_sync_impl(ds, drc->drc_tosnap, tx); in dmu_recv_end_sync()
2794 drc->drc_drrb->drr_creation_time; in dmu_recv_end_sync()
2796 drc->drc_drrb->drr_toguid; in dmu_recv_end_sync()
2816 drc->drc_newsnapobj = in dmu_recv_end_sync()
2817 dsl_dataset_phys(drc->drc_ds)->ds_prev_snap_obj; in dmu_recv_end_sync()
2830 if (drc->drc_raw && drc->drc_ivset_guid != 0) { in dmu_recv_end_sync()
2831 dmu_object_zapify(dp->dp_meta_objset, drc->drc_newsnapobj, in dmu_recv_end_sync()
2833 VERIFY0(zap_update(dp->dp_meta_objset, drc->drc_newsnapobj, in dmu_recv_end_sync()
2835 &drc->drc_ivset_guid, tx)); in dmu_recv_end_sync()
2846 if (!drc->drc_raw && encrypted) { in dmu_recv_end_sync()
2848 drc->drc_ds->ds_object, drc->drc_ds); in dmu_recv_end_sync()
2850 dsl_dataset_disown(drc->drc_ds, 0, dmu_recv_tag); in dmu_recv_end_sync()
2851 drc->drc_ds = NULL; in dmu_recv_end_sync()
2906 dmu_recv_existing_end(dmu_recv_cookie_t *drc) in dmu_recv_existing_end() argument
2914 dsl_dataset_name(drc->drc_ds, name); in dmu_recv_existing_end()
2918 return (dsl_sync_task(drc->drc_tofs, in dmu_recv_existing_end()
2919 dmu_recv_end_check, dmu_recv_end_sync, drc, in dmu_recv_existing_end()
2924 dmu_recv_new_end(dmu_recv_cookie_t *drc) in dmu_recv_new_end() argument
2926 return (dsl_sync_task(drc->drc_tofs, in dmu_recv_new_end()
2927 dmu_recv_end_check, dmu_recv_end_sync, drc, in dmu_recv_new_end()
2932 dmu_recv_end(dmu_recv_cookie_t *drc, void *owner) in dmu_recv_end() argument
2936 drc->drc_owner = owner; in dmu_recv_end()
2938 if (drc->drc_newfs) in dmu_recv_end()
2939 error = dmu_recv_new_end(drc); in dmu_recv_end()
2941 error = dmu_recv_existing_end(drc); in dmu_recv_end()
2944 dmu_recv_cleanup_ds(drc); in dmu_recv_end()
2945 nvlist_free(drc->drc_keynvl); in dmu_recv_end()
2946 } else if (drc->drc_guid_to_ds_map != NULL) { in dmu_recv_end()
2947 (void) add_ds_to_guidmap(drc->drc_tofs, drc->drc_guid_to_ds_map, in dmu_recv_end()
2948 drc->drc_newsnapobj, drc->drc_raw); in dmu_recv_end()