Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd28b6a5 authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba
Browse files

btrfs: extent-tree: Open-code process_func in __btrfs_mod_ref



The process_func function pointer is local to __btrfs_mod_ref() and
points to either btrfs_inc_extent_ref() or btrfs_free_extent().

Open code it to make later delayed ref refactor easier, so we can
refactor btrfs_inc_extent_ref() and btrfs_free_extent() in different
patches.

Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent b28b1f0c
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -3157,10 +3157,6 @@ static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
	int i;
	int level;
	int ret = 0;
	int (*process_func)(struct btrfs_trans_handle *,
			    struct btrfs_root *,
			    u64, u64, u64, u64, u64, u64);


	if (btrfs_is_testing(fs_info))
		return 0;
@@ -3172,11 +3168,6 @@ static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,
	if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0)
		return 0;

	if (inc)
		process_func = btrfs_inc_extent_ref;
	else
		process_func = btrfs_free_extent;

	if (full_backref)
		parent = buf->start;
	else
@@ -3198,16 +3189,27 @@ static int __btrfs_mod_ref(struct btrfs_trans_handle *trans,

			num_bytes = btrfs_file_extent_disk_num_bytes(buf, fi);
			key.offset -= btrfs_file_extent_offset(buf, fi);
			ret = process_func(trans, root, bytenr, num_bytes,
					   parent, ref_root, key.objectid,
					   key.offset);
			if (inc)
				ret = btrfs_inc_extent_ref(trans, root, bytenr,
						num_bytes, parent, ref_root,
						key.objectid, key.offset);
			else
				ret = btrfs_free_extent(trans, root, bytenr,
						num_bytes, parent, ref_root,
						key.objectid, key.offset);
			if (ret)
				goto fail;
		} else {
			bytenr = btrfs_node_blockptr(buf, i);
			num_bytes = fs_info->nodesize;
			ret = process_func(trans, root, bytenr, num_bytes,
					   parent, ref_root, level - 1, 0);
			if (inc)
				ret = btrfs_inc_extent_ref(trans, root, bytenr,
						num_bytes, parent, ref_root,
						level - 1, 0);
			else
				ret = btrfs_free_extent(trans, root, bytenr,
						num_bytes, parent, ref_root,
						level - 1, 0);
			if (ret)
				goto fail;
		}