OSDN Git Service

btrfs: Make btrfs_pin_extent take trans handle
authorNikolay Borisov <nborisov@suse.com>
Mon, 20 Jan 2020 14:09:09 +0000 (16:09 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Mar 2020 16:01:36 +0000 (17:01 +0100)
Preparation for switching pinned extent tracking to a per-transaction
basis.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/ctree.h
fs/btrfs/extent-tree.c

index ffd99c3..2f0ca1c 100644 (file)
@@ -2463,8 +2463,8 @@ int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len);
 int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
                             struct btrfs_fs_info *fs_info, u64 bytenr,
                             u64 offset, int metadata, u64 *refs, u64 *flags);
-int btrfs_pin_extent(struct btrfs_fs_info *fs_info,
-                    u64 bytenr, u64 num, int reserved);
+int btrfs_pin_extent(struct btrfs_trans_handle *trans, u64 bytenr, u64 num,
+                    int reserved);
 int btrfs_pin_extent_for_log_replay(struct btrfs_fs_info *fs_info,
                                    u64 bytenr, u64 num_bytes);
 int btrfs_exclude_logged_extents(struct extent_buffer *eb);
index da3d9ea..5a90d9d 100644 (file)
@@ -1705,8 +1705,7 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
 
        if (TRANS_ABORTED(trans)) {
                if (insert_reserved)
-                       btrfs_pin_extent(trans->fs_info, node->bytenr,
-                                        node->num_bytes, 1);
+                       btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
                return 0;
        }
 
@@ -1721,8 +1720,7 @@ static int run_one_delayed_ref(struct btrfs_trans_handle *trans,
        else
                BUG();
        if (ret && insert_reserved)
-               btrfs_pin_extent(trans->fs_info, node->bytenr,
-                                node->num_bytes, 1);
+               btrfs_pin_extent(trans, node->bytenr, node->num_bytes, 1);
        return ret;
 }
 
@@ -1867,8 +1865,7 @@ static int cleanup_ref_head(struct btrfs_trans_handle *trans,
        spin_unlock(&delayed_refs->lock);
 
        if (head->must_insert_reserved) {
-               btrfs_pin_extent(fs_info, head->bytenr,
-                                head->num_bytes, 1);
+               btrfs_pin_extent(trans, head->bytenr, head->num_bytes, 1);
                if (head->is_data) {
                        ret = btrfs_del_csums(trans, fs_info->csum_root,
                                              head->bytenr, head->num_bytes);
@@ -2612,14 +2609,12 @@ static int pin_down_extent(struct btrfs_block_group *cache,
        return 0;
 }
 
-int btrfs_pin_extent(struct btrfs_fs_info *fs_info,
+int btrfs_pin_extent(struct btrfs_trans_handle *trans,
                     u64 bytenr, u64 num_bytes, int reserved)
 {
        struct btrfs_block_group *cache;
 
-       ASSERT(fs_info->running_transaction);
-
-       cache = btrfs_lookup_block_group(fs_info, bytenr);
+       cache = btrfs_lookup_block_group(trans->fs_info, bytenr);
        BUG_ON(!cache); /* Logic error */
 
        pin_down_extent(cache, bytenr, num_bytes, reserved);
@@ -3345,7 +3340,7 @@ int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref)
            (ref->type == BTRFS_REF_DATA &&
             ref->data_ref.ref_root == BTRFS_TREE_LOG_OBJECTID)) {
                /* unlocks the pinned mutex */
-               btrfs_pin_extent(fs_info, ref->bytenr, ref->len, 1);
+               btrfs_pin_extent(trans, ref->bytenr, ref->len, 1);
                old_ref_mod = new_ref_mod = 0;
                ret = 0;
        } else if (ref->type == BTRFS_REF_METADATA) {