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 <dsterba@suse.com>
This commit is contained in:
David Sterba 2016-12-12 17:45:25 +01:00
parent ee518036d2
commit 87e4233ef0
2 changed files with 28 additions and 0 deletions

View File

@ -438,6 +438,19 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s,
u64 root_id, const u8 *uuid, u64 transid, u64 root_id, const u8 *uuid, u64 transid,
const char *path, const char *path,
enum subvol_search_type type) 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; int ret = 0;
struct btrfs_root_item root_item; struct btrfs_root_item root_item;

View File

@ -80,10 +80,25 @@ struct subvol_uuid_search {
int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s); int subvol_uuid_search_init(int mnt_fd, struct subvol_uuid_search *s);
void subvol_uuid_search_finit(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, struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s,
u64 root_id, const u8 *uuid, u64 transid, u64 root_id, const u8 *uuid, u64 transid,
const char *path, const char *path,
enum subvol_search_type type); 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, void subvol_uuid_search_add(struct subvol_uuid_search *s,
struct subvol_info *si); struct subvol_info *si);