btrfs: use btrfs_for_each_slot in mark_block_group_to_copy
authorGabriel Niebler <gniebler@suse.com>
Wed, 9 Mar 2022 13:50:40 +0000 (14:50 +0100)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 May 2022 15:03:07 +0000 (17:03 +0200)
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>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/dev-replace.c

index f262026..e66a7a9 100644 (file)
@@ -474,6 +474,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;
 
@@ -524,29 +525,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;
@@ -557,30 +537,23 @@ 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);