Commit 6b4d375a authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba

btrfs: scrub: remove root and csum_root arguments from scrub_simple_mirror()

We don't need to pass the roots as arguments, reading them from the
rb-tree is cheap.  Thus there is really not much need to pre-fetch it
and pass it all the way from scrub_stripe().

And we already have more than enough arguments in scrub_simple_mirror()
and scrub_simple_stripe(), it's better to remove them and only grab
those roots in scrub_simple_mirror().
Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 1d403297
...@@ -3509,8 +3509,6 @@ static int sync_write_pointer_for_zoned(struct scrub_ctx *sctx, u64 logical, ...@@ -3509,8 +3509,6 @@ static int sync_write_pointer_for_zoned(struct scrub_ctx *sctx, u64 logical,
* and @logical_length parameter. * and @logical_length parameter.
*/ */
static int scrub_simple_mirror(struct scrub_ctx *sctx, static int scrub_simple_mirror(struct scrub_ctx *sctx,
struct btrfs_root *extent_root,
struct btrfs_root *csum_root,
struct btrfs_block_group *bg, struct btrfs_block_group *bg,
struct map_lookup *map, struct map_lookup *map,
u64 logical_start, u64 logical_length, u64 logical_start, u64 logical_length,
...@@ -3518,6 +3516,8 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, ...@@ -3518,6 +3516,8 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx,
u64 physical, int mirror_num) u64 physical, int mirror_num)
{ {
struct btrfs_fs_info *fs_info = sctx->fs_info; struct btrfs_fs_info *fs_info = sctx->fs_info;
struct btrfs_root *csum_root = btrfs_csum_root(fs_info, bg->start);
struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bg->start);
const u64 logical_end = logical_start + logical_length; const u64 logical_end = logical_start + logical_length;
/* An artificial limit, inherit from old scrub behavior */ /* An artificial limit, inherit from old scrub behavior */
const u32 max_length = SZ_64K; const u32 max_length = SZ_64K;
...@@ -3667,8 +3667,6 @@ static int simple_stripe_mirror_num(struct map_lookup *map, int stripe_index) ...@@ -3667,8 +3667,6 @@ static int simple_stripe_mirror_num(struct map_lookup *map, int stripe_index)
} }
static int scrub_simple_stripe(struct scrub_ctx *sctx, static int scrub_simple_stripe(struct scrub_ctx *sctx,
struct btrfs_root *extent_root,
struct btrfs_root *csum_root,
struct btrfs_block_group *bg, struct btrfs_block_group *bg,
struct map_lookup *map, struct map_lookup *map,
struct btrfs_device *device, struct btrfs_device *device,
...@@ -3688,9 +3686,9 @@ static int scrub_simple_stripe(struct scrub_ctx *sctx, ...@@ -3688,9 +3686,9 @@ static int scrub_simple_stripe(struct scrub_ctx *sctx,
* just RAID1, so we can reuse scrub_simple_mirror() to scrub * just RAID1, so we can reuse scrub_simple_mirror() to scrub
* this stripe. * this stripe.
*/ */
ret = scrub_simple_mirror(sctx, extent_root, csum_root, bg, map, ret = scrub_simple_mirror(sctx, bg, map, cur_logical,
cur_logical, BTRFS_STRIPE_LEN, device, BTRFS_STRIPE_LEN, device, cur_physical,
cur_physical, mirror_num); mirror_num);
if (ret) if (ret)
return ret; return ret;
/* Skip to next stripe which belongs to the target device */ /* Skip to next stripe which belongs to the target device */
...@@ -3708,8 +3706,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx, ...@@ -3708,8 +3706,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
int stripe_index) int stripe_index)
{ {
struct btrfs_fs_info *fs_info = sctx->fs_info; struct btrfs_fs_info *fs_info = sctx->fs_info;
struct btrfs_root *root;
struct btrfs_root *csum_root;
struct blk_plug plug; struct blk_plug plug;
struct map_lookup *map = em->map_lookup; struct map_lookup *map = em->map_lookup;
const u64 profile = map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK; const u64 profile = map->type & BTRFS_BLOCK_GROUP_PROFILE_MASK;
...@@ -3732,9 +3728,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx, ...@@ -3732,9 +3728,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
atomic_read(&sctx->bios_in_flight) == 0); atomic_read(&sctx->bios_in_flight) == 0);
scrub_blocked_if_needed(fs_info); scrub_blocked_if_needed(fs_info);
root = btrfs_extent_root(fs_info, bg->start);
csum_root = btrfs_csum_root(fs_info, bg->start);
/* /*
* collect all data csums for the stripe to avoid seeking during * collect all data csums for the stripe to avoid seeking during
* the scrub. This might currently (crc32) end up to be about 1MB * the scrub. This might currently (crc32) end up to be about 1MB
...@@ -3766,16 +3759,14 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx, ...@@ -3766,16 +3759,14 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
* Only @physical and @mirror_num needs to calculated using * Only @physical and @mirror_num needs to calculated using
* @stripe_index. * @stripe_index.
*/ */
ret = scrub_simple_mirror(sctx, root, csum_root, bg, map, ret = scrub_simple_mirror(sctx, bg, map, bg->start, bg->length,
bg->start, bg->length, scrub_dev, scrub_dev, map->stripes[stripe_index].physical,
map->stripes[stripe_index].physical,
stripe_index + 1); stripe_index + 1);
offset = 0; offset = 0;
goto out; goto out;
} }
if (profile & (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID10)) { if (profile & (BTRFS_BLOCK_GROUP_RAID0 | BTRFS_BLOCK_GROUP_RAID10)) {
ret = scrub_simple_stripe(sctx, root, csum_root, bg, map, ret = scrub_simple_stripe(sctx, bg, map, scrub_dev, stripe_index);
scrub_dev, stripe_index);
offset = (stripe_index / map->sub_stripes) << BTRFS_STRIPE_LEN_SHIFT; offset = (stripe_index / map->sub_stripes) << BTRFS_STRIPE_LEN_SHIFT;
goto out; goto out;
} }
...@@ -3821,8 +3812,7 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx, ...@@ -3821,8 +3812,7 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
* We can reuse scrub_simple_mirror() here, as the repair part * We can reuse scrub_simple_mirror() here, as the repair part
* is still based on @mirror_num. * is still based on @mirror_num.
*/ */
ret = scrub_simple_mirror(sctx, root, csum_root, bg, map, ret = scrub_simple_mirror(sctx, bg, map, logical, BTRFS_STRIPE_LEN,
logical, BTRFS_STRIPE_LEN,
scrub_dev, physical, 1); scrub_dev, physical, 1);
if (ret < 0) if (ret < 0)
goto out; goto out;
......
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