Merge tag 'v5.3-rc1' into docs-next
[linux-2.6-block.git] / fs / btrfs / backref.c
index 982152d3f9200c92334da084ddf9baa90196696c..89116afda7a20ff48f41e95a5f6e0ba8ff3da8d6 100644 (file)
@@ -1465,12 +1465,11 @@ int btrfs_find_all_roots(struct btrfs_trans_handle *trans,
  *
  * Return: 0 if extent is not shared, 1 if it is shared, < 0 on error.
  */
-int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr)
+int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr,
+               struct ulist *roots, struct ulist *tmp)
 {
        struct btrfs_fs_info *fs_info = root->fs_info;
        struct btrfs_trans_handle *trans;
-       struct ulist *tmp = NULL;
-       struct ulist *roots = NULL;
        struct ulist_iterator uiter;
        struct ulist_node *node;
        struct seq_list elem = SEQ_LIST_INIT(elem);
@@ -1481,12 +1480,8 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr)
                .share_count = 0,
        };
 
-       tmp = ulist_alloc(GFP_NOFS);
-       roots = ulist_alloc(GFP_NOFS);
-       if (!tmp || !roots) {
-               ret = -ENOMEM;
-               goto out;
-       }
+       ulist_init(roots);
+       ulist_init(tmp);
 
        trans = btrfs_attach_transaction(root);
        if (IS_ERR(trans)) {
@@ -1527,8 +1522,8 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr)
                up_read(&fs_info->commit_root_sem);
        }
 out:
-       ulist_free(tmp);
-       ulist_free(roots);
+       ulist_release(roots);
+       ulist_release(tmp);
        return ret;
 }