diff mbox series

[v3,03/14] btrfs: Use btrfs_for_each_slot in mark_block_group_to_copy

Message ID 20220302164829.17524-4-gniebler@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: Introduce macro to iterate over slots | expand

Commit Message

Gabriel Niebler March 2, 2022, 4:48 p.m. UTC
This function can be simplified by refactoring to use the new iterator macro.

No functional changes.

Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
Signed-off-by: Gabriel Niebler <gniebler@suse.com>
---
 fs/btrfs/dev-replace.c | 41 ++++++++---------------------------------
 1 file changed, 8 insertions(+), 33 deletions(-)

Comments

David Sterba March 8, 2022, 2:33 p.m. UTC | #1
On Wed, Mar 02, 2022 at 05:48:18PM +0100, Gabriel Niebler wrote:
> This function can be simplified by refactoring to use the new iterator macro.
> 
> No functional changes.
> 
> Signed-off-by: Marcos Paulo de Souza <mpdesouza@suse.com>
> Signed-off-by: Gabriel Niebler <gniebler@suse.com>
> ---
>  fs/btrfs/dev-replace.c | 41 ++++++++---------------------------------
>  1 file changed, 8 insertions(+), 33 deletions(-)
> 
> diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
> index 62b9651ea662..3357739f427f 100644
> --- a/fs/btrfs/dev-replace.c
> +++ b/fs/btrfs/dev-replace.c
> @@ -470,6 +470,7 @@ static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
>  	struct btrfs_dev_extent *dev_extent = NULL;
>  	struct btrfs_block_group *cache;
>  	struct btrfs_trans_handle *trans;
> +	int iter_ret = 0;
>  	int ret = 0;
>  	u64 chunk_offset;
>  
> @@ -520,29 +521,8 @@ static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
>  	key.type = BTRFS_DEV_EXTENT_KEY;
>  	key.offset = 0;
>  
> -	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
> -	if (ret < 0)
> -		goto free_path;
> -	if (ret > 0) {
> -		if (path->slots[0] >=
> -		    btrfs_header_nritems(path->nodes[0])) {
> -			ret = btrfs_next_leaf(root, path);
> -			if (ret < 0)
> -				goto free_path;
> -			if (ret > 0) {
> -				ret = 0;
> -				goto free_path;
> -			}
> -		} else {
> -			ret = 0;
> -		}
> -	}
> -
> -	while (1) {
> +	btrfs_for_each_slot(root, &key, &found_key, path, iter_ret) {
>  		struct extent_buffer *leaf = path->nodes[0];
> -		int slot = path->slots[0];
> -
> -		btrfs_item_key_to_cpu(leaf, &found_key, slot);
>  
>  		if (found_key.objectid != src_dev->devid)
>  			break;
> @@ -553,30 +533,25 @@ static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
>  		if (found_key.offset < key.offset)
>  			break;
>  
> -		dev_extent = btrfs_item_ptr(leaf, slot, struct btrfs_dev_extent);
> +		dev_extent = btrfs_item_ptr(leaf, path->slots[0],
> +					    struct btrfs_dev_extent);
>  
>  		chunk_offset = btrfs_dev_extent_chunk_offset(leaf, dev_extent);
>  
>  		cache = btrfs_lookup_block_group(fs_info, chunk_offset);
>  		if (!cache)
> -			goto skip;
> +			continue;
>  
>  		spin_lock(&cache->lock);
>  		cache->to_copy = 1;
>  		spin_unlock(&cache->lock);
>  
>  		btrfs_put_block_group(cache);
> -
> -skip:
> -		ret = btrfs_next_item(root, path);
> -		if (ret != 0) {
> -			if (ret > 0)
> -				ret = 0;
> -			break;
> -		}
> +	}
> +	if (iter_ret < 0) {
> +		ret = iter_ret;
>  	}

No { } around single statement conditions 'if'
diff mbox series

Patch

diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
index 62b9651ea662..3357739f427f 100644
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
@@ -470,6 +470,7 @@  static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
 	struct btrfs_dev_extent *dev_extent = NULL;
 	struct btrfs_block_group *cache;
 	struct btrfs_trans_handle *trans;
+	int iter_ret = 0;
 	int ret = 0;
 	u64 chunk_offset;
 
@@ -520,29 +521,8 @@  static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
 	key.type = BTRFS_DEV_EXTENT_KEY;
 	key.offset = 0;
 
-	ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
-	if (ret < 0)
-		goto free_path;
-	if (ret > 0) {
-		if (path->slots[0] >=
-		    btrfs_header_nritems(path->nodes[0])) {
-			ret = btrfs_next_leaf(root, path);
-			if (ret < 0)
-				goto free_path;
-			if (ret > 0) {
-				ret = 0;
-				goto free_path;
-			}
-		} else {
-			ret = 0;
-		}
-	}
-
-	while (1) {
+	btrfs_for_each_slot(root, &key, &found_key, path, iter_ret) {
 		struct extent_buffer *leaf = path->nodes[0];
-		int slot = path->slots[0];
-
-		btrfs_item_key_to_cpu(leaf, &found_key, slot);
 
 		if (found_key.objectid != src_dev->devid)
 			break;
@@ -553,30 +533,25 @@  static int mark_block_group_to_copy(struct btrfs_fs_info *fs_info,
 		if (found_key.offset < key.offset)
 			break;
 
-		dev_extent = btrfs_item_ptr(leaf, slot, struct btrfs_dev_extent);
+		dev_extent = btrfs_item_ptr(leaf, path->slots[0],
+					    struct btrfs_dev_extent);
 
 		chunk_offset = btrfs_dev_extent_chunk_offset(leaf, dev_extent);
 
 		cache = btrfs_lookup_block_group(fs_info, chunk_offset);
 		if (!cache)
-			goto skip;
+			continue;
 
 		spin_lock(&cache->lock);
 		cache->to_copy = 1;
 		spin_unlock(&cache->lock);
 
 		btrfs_put_block_group(cache);
-
-skip:
-		ret = btrfs_next_item(root, path);
-		if (ret != 0) {
-			if (ret > 0)
-				ret = 0;
-			break;
-		}
+	}
+	if (iter_ret < 0) {
+		ret = iter_ret;
 	}
 
-free_path:
 	btrfs_free_path(path);
 unlock:
 	mutex_unlock(&fs_info->chunk_mutex);