693 }
694
695 /*
696 * Actually do the bulk of the work in a zfs send.
697 *
698 * Note: Releases dp using the specified tag.
699 */
700 static int
701 dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_t *to_ds,
702 zfs_bookmark_phys_t *ancestor_zb,
703 boolean_t is_clone, boolean_t embedok, boolean_t large_block_ok, int outfd,
704 uint64_t resumeobj, uint64_t resumeoff,
705 vnode_t *vp, offset_t *off)
706 {
707 objset_t *os;
708 dmu_replay_record_t *drr;
709 dmu_sendarg_t *dsp;
710 int err;
711 uint64_t fromtxg = 0;
712 uint64_t featureflags = 0;
713 struct send_thread_arg to_arg = { 0 };
714
715 err = dmu_objset_from_ds(to_ds, &os);
716 if (err != 0) {
717 dsl_pool_rele(dp, tag);
718 return (err);
719 }
720
721 drr = kmem_zalloc(sizeof (dmu_replay_record_t), KM_SLEEP);
722 drr->drr_type = DRR_BEGIN;
723 drr->drr_u.drr_begin.drr_magic = DMU_BACKUP_MAGIC;
724 DMU_SET_STREAM_HDRTYPE(drr->drr_u.drr_begin.drr_versioninfo,
725 DMU_SUBSTREAM);
726
727 #ifdef _KERNEL
728 if (dmu_objset_type(os) == DMU_OST_ZFS) {
729 uint64_t version;
730 if (zfs_get_zplprop(os, ZFS_PROP_VERSION, &version) != 0) {
731 kmem_free(drr, sizeof (dmu_replay_record_t));
732 dsl_pool_rele(dp, tag);
733 return (SET_ERROR(EINVAL));
|
693 }
694
695 /*
696 * Actually do the bulk of the work in a zfs send.
697 *
698 * Note: Releases dp using the specified tag.
699 */
700 static int
701 dmu_send_impl(void *tag, dsl_pool_t *dp, dsl_dataset_t *to_ds,
702 zfs_bookmark_phys_t *ancestor_zb,
703 boolean_t is_clone, boolean_t embedok, boolean_t large_block_ok, int outfd,
704 uint64_t resumeobj, uint64_t resumeoff,
705 vnode_t *vp, offset_t *off)
706 {
707 objset_t *os;
708 dmu_replay_record_t *drr;
709 dmu_sendarg_t *dsp;
710 int err;
711 uint64_t fromtxg = 0;
712 uint64_t featureflags = 0;
713 struct send_thread_arg to_arg = { .error_code = 0 };
714
715 err = dmu_objset_from_ds(to_ds, &os);
716 if (err != 0) {
717 dsl_pool_rele(dp, tag);
718 return (err);
719 }
720
721 drr = kmem_zalloc(sizeof (dmu_replay_record_t), KM_SLEEP);
722 drr->drr_type = DRR_BEGIN;
723 drr->drr_u.drr_begin.drr_magic = DMU_BACKUP_MAGIC;
724 DMU_SET_STREAM_HDRTYPE(drr->drr_u.drr_begin.drr_versioninfo,
725 DMU_SUBSTREAM);
726
727 #ifdef _KERNEL
728 if (dmu_objset_type(os) == DMU_OST_ZFS) {
729 uint64_t version;
730 if (zfs_get_zplprop(os, ZFS_PROP_VERSION, &version) != 0) {
731 kmem_free(drr, sizeof (dmu_replay_record_t));
732 dsl_pool_rele(dp, tag);
733 return (SET_ERROR(EINVAL));
|