]> git.baikalelectronics.ru Git - kernel.git/commitdiff
btrfs: zoned: sink zone check into btrfs_repair_one_zone
authorJohannes Thumshirn <johannes.thumshirn@wdc.com>
Tue, 7 Dec 2021 14:28:36 +0000 (06:28 -0800)
committerDavid Sterba <dsterba@suse.com>
Fri, 7 Jan 2022 13:18:26 +0000 (14:18 +0100)
Sink zone check into btrfs_repair_one_zone() so we don't need to do it
in all callers.

Also as btrfs_repair_one_zone() doesn't return a sensible error, make it
a boolean function and return false in case it got called on a non-zoned
filesystem and true on a zoned filesystem.

Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c
fs/btrfs/scrub.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h

index e367b4c82cec0a0237bc5c7fce164cde39a5e8a3..790d3255be09878669c2a2d1baf406348733f590 100644 (file)
@@ -2314,8 +2314,8 @@ static int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start,
        ASSERT(!(fs_info->sb->s_flags & SB_RDONLY));
        BUG_ON(!mirror_num);
 
-       if (btrfs_is_zoned(fs_info))
-               return btrfs_repair_one_zone(fs_info, logical);
+       if (btrfs_repair_one_zone(fs_info, logical))
+               return 0;
 
        bio = btrfs_bio_alloc(1);
        bio->bi_iter.bi_size = 0;
index 4afa5ae179893cffd183d6f94767b606b503e524..f28ae41b1df39aba85d74863717d25e36e678c6d 100644 (file)
@@ -845,8 +845,8 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check)
        have_csum = sblock_to_check->pagev[0]->have_csum;
        dev = sblock_to_check->pagev[0]->dev;
 
-       if (btrfs_is_zoned(fs_info) && !sctx->is_dev_replace)
-               return btrfs_repair_one_zone(fs_info, logical);
+       if (!sctx->is_dev_replace && btrfs_repair_one_zone(fs_info, logical))
+               return 0;
 
        /*
         * We must use GFP_NOFS because the scrub task might be waiting for a
index 9db9d66b54704c7567e30b2c3d165e55829b6597..f8be80aad8f0860e552fe4f6724f0825571bda03 100644 (file)
@@ -8341,23 +8341,26 @@ out:
        return ret;
 }
 
-int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical)
+bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical)
 {
        struct btrfs_block_group *cache;
 
+       if (!btrfs_is_zoned(fs_info))
+               return false;
+
        /* Do not attempt to repair in degraded state */
        if (btrfs_test_opt(fs_info, DEGRADED))
-               return 0;
+               return true;
 
        cache = btrfs_lookup_block_group(fs_info, logical);
        if (!cache)
-               return 0;
+               return true;
 
        spin_lock(&cache->lock);
        if (cache->relocating_repair) {
                spin_unlock(&cache->lock);
                btrfs_put_block_group(cache);
-               return 0;
+               return true;
        }
        cache->relocating_repair = 1;
        spin_unlock(&cache->lock);
@@ -8365,5 +8368,5 @@ int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical)
        kthread_run(relocating_repair_kthread, cache,
                    "btrfs-relocating-repair");
 
-       return 0;
+       return true;
 }
index 3b81306807493ae76045ee0812418e8785ed356e..9cf1d93a3d663106d5aa28b07bf995ef29765b7b 100644 (file)
@@ -637,6 +637,6 @@ enum btrfs_raid_types __attribute_const__ btrfs_bg_flags_to_raid_index(u64 flags
 int btrfs_bg_type_to_factor(u64 flags);
 const char *btrfs_bg_type_to_raid_name(u64 flags);
 int btrfs_verify_dev_extents(struct btrfs_fs_info *fs_info);
-int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical);
+bool btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical);
 
 #endif