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

Commit a3f7fde2 authored by Zhao Lei's avatar Zhao Lei Committed by David Sterba
Browse files

btrfs: reada: Move is_need_to_readahead contition earlier



Move is_need_to_readahead contition earlier to avoid useless loop
to get relative data for readahead.

Signed-off-by: default avatarZhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 97d5f0e6
Loading
Loading
Loading
Loading
+9 −11
Original line number Original line Diff line number Diff line
@@ -660,7 +660,6 @@ static int reada_start_machine_dev(struct btrfs_fs_info *fs_info,
	u64 logical;
	u64 logical;
	int ret;
	int ret;
	int i;
	int i;
	int need_kick = 0;


	spin_lock(&fs_info->reada_lock);
	spin_lock(&fs_info->reada_lock);
	if (dev->reada_curr_zone == NULL) {
	if (dev->reada_curr_zone == NULL) {
@@ -696,6 +695,15 @@ static int reada_start_machine_dev(struct btrfs_fs_info *fs_info,


	spin_unlock(&fs_info->reada_lock);
	spin_unlock(&fs_info->reada_lock);


	spin_lock(&re->lock);
	if (re->scheduled_for || list_empty(&re->extctl)) {
		spin_unlock(&re->lock);
		reada_extent_put(fs_info, re);
		return 0;
	}
	re->scheduled_for = dev;
	spin_unlock(&re->lock);

	/*
	/*
	 * find mirror num
	 * find mirror num
	 */
	 */
@@ -707,18 +715,8 @@ static int reada_start_machine_dev(struct btrfs_fs_info *fs_info,
	}
	}
	logical = re->logical;
	logical = re->logical;


	spin_lock(&re->lock);
	if (!re->scheduled_for && !list_empty(&re->extctl)) {
		re->scheduled_for = dev;
		need_kick = 1;
	}
	spin_unlock(&re->lock);

	reada_extent_put(fs_info, re);
	reada_extent_put(fs_info, re);


	if (!need_kick)
		return 0;

	atomic_inc(&dev->reada_in_flight);
	atomic_inc(&dev->reada_in_flight);
	ret = reada_tree_block_flagged(fs_info->extent_root, logical,
	ret = reada_tree_block_flagged(fs_info->extent_root, logical,
			mirror_num, &eb);
			mirror_num, &eb);