Commit 554aed7d authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by David Sterba

btrfs: zoned: sink zone check into btrfs_repair_one_zone

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: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 8fdf54fe
...@@ -2314,8 +2314,8 @@ static int repair_io_failure(struct btrfs_fs_info *fs_info, u64 ino, u64 start, ...@@ -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)); ASSERT(!(fs_info->sb->s_flags & SB_RDONLY));
BUG_ON(!mirror_num); BUG_ON(!mirror_num);
if (btrfs_is_zoned(fs_info)) if (btrfs_repair_one_zone(fs_info, logical))
return btrfs_repair_one_zone(fs_info, logical); return 0;
bio = btrfs_bio_alloc(1); bio = btrfs_bio_alloc(1);
bio->bi_iter.bi_size = 0; bio->bi_iter.bi_size = 0;
......
...@@ -845,8 +845,8 @@ static int scrub_handle_errored_block(struct scrub_block *sblock_to_check) ...@@ -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; have_csum = sblock_to_check->pagev[0]->have_csum;
dev = sblock_to_check->pagev[0]->dev; dev = sblock_to_check->pagev[0]->dev;
if (btrfs_is_zoned(fs_info) && !sctx->is_dev_replace) if (!sctx->is_dev_replace && btrfs_repair_one_zone(fs_info, logical))
return btrfs_repair_one_zone(fs_info, logical); return 0;
/* /*
* We must use GFP_NOFS because the scrub task might be waiting for a * We must use GFP_NOFS because the scrub task might be waiting for a
......
...@@ -8341,23 +8341,26 @@ static int relocating_repair_kthread(void *data) ...@@ -8341,23 +8341,26 @@ static int relocating_repair_kthread(void *data)
return ret; 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; struct btrfs_block_group *cache;
if (!btrfs_is_zoned(fs_info))
return false;
/* Do not attempt to repair in degraded state */ /* Do not attempt to repair in degraded state */
if (btrfs_test_opt(fs_info, DEGRADED)) if (btrfs_test_opt(fs_info, DEGRADED))
return 0; return true;
cache = btrfs_lookup_block_group(fs_info, logical); cache = btrfs_lookup_block_group(fs_info, logical);
if (!cache) if (!cache)
return 0; return true;
spin_lock(&cache->lock); spin_lock(&cache->lock);
if (cache->relocating_repair) { if (cache->relocating_repair) {
spin_unlock(&cache->lock); spin_unlock(&cache->lock);
btrfs_put_block_group(cache); btrfs_put_block_group(cache);
return 0; return true;
} }
cache->relocating_repair = 1; cache->relocating_repair = 1;
spin_unlock(&cache->lock); spin_unlock(&cache->lock);
...@@ -8365,5 +8368,5 @@ int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical) ...@@ -8365,5 +8368,5 @@ int btrfs_repair_one_zone(struct btrfs_fs_info *fs_info, u64 logical)
kthread_run(relocating_repair_kthread, cache, kthread_run(relocating_repair_kthread, cache,
"btrfs-relocating-repair"); "btrfs-relocating-repair");
return 0; return true;
} }
...@@ -637,6 +637,6 @@ enum btrfs_raid_types __attribute_const__ btrfs_bg_flags_to_raid_index(u64 flags ...@@ -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); int btrfs_bg_type_to_factor(u64 flags);
const char *btrfs_bg_type_to_raid_name(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_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 #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment