Commit 7fcee18d authored by Josef Bacik's avatar Josef Bacik Committed by David Sterba
Browse files

btrfs: push lookup_info into struct walk_control



Instead of using a flag we're passing around everywhere, add a field to
walk_control that we're already passing around everywhere and use that
instead.

Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 3fdf5798
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -5220,6 +5220,8 @@ struct walk_control {
	int reada_slot;
	int reada_count;
	int restarted;
	/* Indicate that extent info needs to be looked up when walking the tree. */
	int lookup_info;
};

#define DROP_REFERENCE	1
@@ -5316,7 +5318,7 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans,
static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
				   struct btrfs_root *root,
				   struct btrfs_path *path,
				   struct walk_control *wc, int lookup_info)
				   struct walk_control *wc)
{
	struct btrfs_fs_info *fs_info = root->fs_info;
	int level = wc->level;
@@ -5331,7 +5333,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans,
	 * when reference count of tree block is 1, it won't increase
	 * again. once full backref flag is set, we never clear it.
	 */
	if (lookup_info &&
	if (wc->lookup_info &&
	    ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) ||
	     (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) {
		BUG_ON(!path->locks[level]);
@@ -5423,7 +5425,7 @@ static int check_ref_exists(struct btrfs_trans_handle *trans,
static noinline int do_walk_down(struct btrfs_trans_handle *trans,
				 struct btrfs_root *root,
				 struct btrfs_path *path,
				 struct walk_control *wc, int *lookup_info)
				 struct walk_control *wc)
{
	struct btrfs_fs_info *fs_info = root->fs_info;
	u64 bytenr;
@@ -5445,7 +5447,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
	 */
	if (wc->stage == UPDATE_BACKREF &&
	    generation <= root->root_key.offset) {
		*lookup_info = 1;
		wc->lookup_info = 1;
		return 1;
	}

@@ -5477,7 +5479,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
		ret = -EIO;
		goto out_unlock;
	}
	*lookup_info = 0;
	wc->lookup_info = 0;

	if (wc->stage == DROP_REFERENCE) {
		if (wc->refs[level - 1] > 1) {
@@ -5515,7 +5517,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
			return ret;
		}
		btrfs_tree_lock(next);
		*lookup_info = 1;
		wc->lookup_info = 1;
	}

	level--;
@@ -5604,7 +5606,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans,
			goto out_unlock;
	}
no_delete:
	*lookup_info = 1;
	wc->lookup_info = 1;
	ret = 1;

out_unlock:
@@ -5738,11 +5740,11 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
				   struct walk_control *wc)
{
	int level = wc->level;
	int lookup_info = 1;
	int ret = 0;

	wc->lookup_info = 1;
	while (level >= 0) {
		ret = walk_down_proc(trans, root, path, wc, lookup_info);
		ret = walk_down_proc(trans, root, path, wc);
		if (ret)
			break;

@@ -5753,7 +5755,7 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans,
		    btrfs_header_nritems(path->nodes[level]))
			break;

		ret = do_walk_down(trans, root, path, wc, &lookup_info);
		ret = do_walk_down(trans, root, path, wc);
		if (ret > 0) {
			path->slots[level]++;
			continue;