From 87e4233ef0abc1527a2d425bcb5131b7b5f6d295 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Mon, 12 Dec 2016 17:45:25 +0100 Subject: [PATCH] btrfs-progs: fixup API after change in subvol_uuid_search The return value fix to subvol_uuid_search changes the API semantics, we must keep it compatible, so we introduce a v2 interface that returns the negative error value in case of error. Library version bump will follow. Signed-off-by: David Sterba --- send-utils.c | 13 +++++++++++++ send-utils.h | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/send-utils.c b/send-utils.c index 95445b58..8b7f2d31 100644 --- a/send-utils.c +++ b/send-utils.c @@ -438,6 +438,19 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s, u64 root_id, const u8 *uuid, u64 transid, const char *path, enum subvol_search_type type) +{ + struct subvol_info *si; + + si = subvol_uuid_search2(s, root_id, uuid, transid, path, type); + if (IS_ERR(si)) + return NULL; + return si; +} + +struct subvol_info *subvol_uuid_search2(struct subvol_uuid_search *s, + u64 root_id, const u8 *uuid, u64 transid, + const char *path, + enum subvol_search_type type) { int ret = 0; struct btrfs_root_item root_item; diff --git a/send-utils.h b/send-utils.h index 677a1db2..e8f86912 100644 --- a/send-utils.h +++ b/send-utils.h @@ -80,10 +80,25 @@ struct subvol_uuid_search { int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s); void subvol_uuid_search_finit(struct subvol_uuid_search *s); +/* + * Search for a subvolume by given type (received uuid, root id, path), returns + * pointer to newly allocated struct subvol_info or NULL in case it's not found + * or there was another error. This ambiguity of error value is fixed by + * subvol_uuid_search2 that returns a negative errno in case of an error, of a + * valid pointer otherwise. + * + * This function will be deprecated in the future, please consider using v2 in + * new code unless you need to keep backward compatibility with older + * btrfs-progs. + */ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s, u64 root_id, const u8 *uuid, u64 transid, const char *path, enum subvol_search_type type); +struct subvol_info *subvol_uuid_search2(struct subvol_uuid_search *s, + u64 root_id, const u8 *uuid, u64 transid, + const char *path, + enum subvol_search_type type); void subvol_uuid_search_add(struct subvol_uuid_search *s, struct subvol_info *si);