btrfs-progs: fixup API after change in subvol_uuid_search
authorDavid Sterba <dsterba@suse.com>
Mon, 12 Dec 2016 16:45:25 +0000 (17:45 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 14 Dec 2016 14:06:36 +0000 (15:06 +0100)
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>
send-utils.c
send-utils.h

index 95445b5..8b7f2d3 100644 (file)
@@ -439,6 +439,19 @@ struct subvol_info *subvol_uuid_search(struct subvol_uuid_search *s,
                                       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;
        struct subvol_info *info = NULL;
index 677a1db..e8f8691 100644 (file)
@@ -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);