X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=send-utils.h;h=677a1db2f3f8e727b86fcf28027b15ac18e72bec;hb=52bfe9ef78fdf6c1f1c5ceb3f7a8bf8bf2164775;hp=ed1a40e0c5a917e59d182c89de402d08f10cfb7b;hpb=5f9c5a23e5ff0c5949480ad24a9818c50f5a8dc6;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/send-utils.h b/send-utils.h index ed1a40e..677a1db 100644 --- a/send-utils.h +++ b/send-utils.h @@ -15,13 +15,16 @@ * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 021110-1307, USA. */ -#ifndef SEND_UTILS_H_ -#define SEND_UTILS_H_ + +#ifndef __BTRFS_SEND_UTILS_H__ +#define __BTRFS_SEND_UTILS_H__ #if BTRFS_FLAT_INCLUDES +#include "kerncompat.h" #include "ctree.h" #include "rbtree.h" #else +#include #include #include #endif /* BTRFS_FLAT_INCLUDES */ @@ -30,6 +33,12 @@ extern "C" { #endif +/* + * Compatibility code for kernels < 3.12; the UUID tree is not available there + * and we have to do the slow search. This should be deprecated someday. + */ +#define BTRFS_COMPAT_SEND_NO_UUID_TREE 1 + enum subvol_search_type { subvol_search_by_root_id, subvol_search_by_uuid, @@ -38,6 +47,13 @@ enum subvol_search_type { }; struct subvol_info { +#ifdef BTRFS_COMPAT_SEND_NO_UUID_TREE + struct rb_node rb_root_id_node; + struct rb_node rb_local_node; + struct rb_node rb_received_node; + struct rb_node rb_path_node; +#endif + u64 root_id; u8 uuid[BTRFS_UUID_SIZE]; u8 parent_uuid[BTRFS_UUID_SIZE]; @@ -52,6 +68,14 @@ struct subvol_info { struct subvol_uuid_search { int mnt_fd; +#ifdef BTRFS_COMPAT_SEND_NO_UUID_TREE + int uuid_tree_existed; + + struct rb_root root_id_subvols; + struct rb_root local_subvols; + struct rb_root received_subvols; + struct rb_root path_subvols; +#endif }; int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s); @@ -65,11 +89,20 @@ void subvol_uuid_search_add(struct subvol_uuid_search *s, int btrfs_subvolid_resolve(int fd, char *path, size_t path_len, u64 subvol_id); +/* + * DEPRECATED: the functions path_cat and path_cat3 are unsafe and should not + * be used, use the _out variants and always check the return code. + */ +__attribute__((deprecated)) char *path_cat(const char *p1, const char *p2); +__attribute__((deprecated)) char *path_cat3(const char *p1, const char *p2, const char *p3); +int path_cat_out(char *out, const char *p1, const char *p2); +int path_cat3_out(char *out, const char *p1, const char *p2, const char *p3); + #ifdef __cplusplus } #endif -#endif /* SEND_UTILS_H_ */ +#endif