785 extern void dmu_fini(void);
786
787 typedef void (*dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp,
788 uint64_t object, uint64_t offset, int len);
789 void dmu_traverse_objset(objset_t *os, uint64_t txg_start,
790 dmu_traverse_cb_t cb, void *arg);
791
792 int dmu_send(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorigin,
793 int outfd, struct vnode *vp, offset_t *off);
794 int dmu_send_estimate(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorign,
795 uint64_t *sizep);
796
797 typedef struct dmu_recv_cookie {
798 /*
799 * This structure is opaque!
800 *
801 * If logical and real are different, we are recving the stream
802 * into the "real" temporary clone, and then switching it with
803 * the "logical" target.
804 */
805 struct dsl_dataset *drc_logical_ds;
806 struct dsl_dataset *drc_real_ds;
807 struct drr_begin *drc_drrb;
808 char *drc_tosnap;
809 char *drc_top_ds;
810 boolean_t drc_newfs;
811 boolean_t drc_force;
812 struct avl_tree *drc_guid_to_ds_map;
813 } dmu_recv_cookie_t;
814
815 int dmu_recv_begin(char *tofs, char *tosnap, char *topds, struct drr_begin *,
816 boolean_t force, objset_t *origin, dmu_recv_cookie_t *);
817 int dmu_recv_stream(dmu_recv_cookie_t *drc, struct vnode *vp, offset_t *voffp,
818 int cleanup_fd, uint64_t *action_handlep);
819 int dmu_recv_end(dmu_recv_cookie_t *drc);
820
821 int dmu_diff(objset_t *tosnap, objset_t *fromsnap, struct vnode *vp,
822 offset_t *off);
823
824 /* CRC64 table */
825 #define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL /* ECMA-182, reflected form */
|
785 extern void dmu_fini(void);
786
787 typedef void (*dmu_traverse_cb_t)(objset_t *os, void *arg, struct blkptr *bp,
788 uint64_t object, uint64_t offset, int len);
789 void dmu_traverse_objset(objset_t *os, uint64_t txg_start,
790 dmu_traverse_cb_t cb, void *arg);
791
792 int dmu_send(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorigin,
793 int outfd, struct vnode *vp, offset_t *off);
794 int dmu_send_estimate(objset_t *tosnap, objset_t *fromsnap, boolean_t fromorign,
795 uint64_t *sizep);
796
797 typedef struct dmu_recv_cookie {
798 /*
799 * This structure is opaque!
800 *
801 * If logical and real are different, we are recving the stream
802 * into the "real" temporary clone, and then switching it with
803 * the "logical" target.
804 */
805 uint64_t drc_logical_dsobj;
806 struct dsl_dataset *drc_real_ds;
807 struct drr_begin *drc_drrb;
808 char *drc_tosnap;
809 char *drc_top_ds;
810 boolean_t drc_newfs;
811 boolean_t drc_force;
812 struct avl_tree *drc_guid_to_ds_map;
813 } dmu_recv_cookie_t;
814
815 int dmu_recv_begin(char *tofs, char *tosnap, char *topds, struct drr_begin *,
816 boolean_t force, objset_t *origin, dmu_recv_cookie_t *);
817 int dmu_recv_stream(dmu_recv_cookie_t *drc, struct vnode *vp, offset_t *voffp,
818 int cleanup_fd, uint64_t *action_handlep);
819 int dmu_recv_end(dmu_recv_cookie_t *drc);
820
821 int dmu_diff(objset_t *tosnap, objset_t *fromsnap, struct vnode *vp,
822 offset_t *off);
823
824 /* CRC64 table */
825 #define ZFS_CRC64_POLY 0xC96C5795D7870F42ULL /* ECMA-182, reflected form */
|