aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/scrub.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/scrub.c')
-rw-r--r--fs/btrfs/scrub.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 4678f03e878e..fa35cdc46494 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -1350,7 +1350,7 @@ static int scrub_setup_recheck_block(struct scrub_block *original_sblock,
1350 recover->bbio = bbio; 1350 recover->bbio = bbio;
1351 recover->map_length = mapped_length; 1351 recover->map_length = mapped_length;
1352 1352
1353 BUG_ON(page_index >= SCRUB_PAGES_PER_RD_BIO); 1353 BUG_ON(page_index >= SCRUB_MAX_PAGES_PER_BLOCK);
1354 1354
1355 nmirrors = min(scrub_nr_raid_mirrors(bbio), BTRFS_MAX_MIRRORS); 1355 nmirrors = min(scrub_nr_raid_mirrors(bbio), BTRFS_MAX_MIRRORS);
1356 1356
@@ -2127,6 +2127,8 @@ static void scrub_missing_raid56_end_io(struct bio *bio)
2127 if (bio->bi_error) 2127 if (bio->bi_error)
2128 sblock->no_io_error_seen = 0; 2128 sblock->no_io_error_seen = 0;
2129 2129
2130 bio_put(bio);
2131
2130 btrfs_queue_work(fs_info->scrub_workers, &sblock->work); 2132 btrfs_queue_work(fs_info->scrub_workers, &sblock->work);
2131} 2133}
2132 2134
@@ -2860,7 +2862,7 @@ static noinline_for_stack int scrub_raid56_parity(struct scrub_ctx *sctx,
2860 int extent_mirror_num; 2862 int extent_mirror_num;
2861 int stop_loop = 0; 2863 int stop_loop = 0;
2862 2864
2863 nsectors = map->stripe_len / root->sectorsize; 2865 nsectors = div_u64(map->stripe_len, root->sectorsize);
2864 bitmap_len = scrub_calc_parity_bitmap_len(nsectors); 2866 bitmap_len = scrub_calc_parity_bitmap_len(nsectors);
2865 sparity = kzalloc(sizeof(struct scrub_parity) + 2 * bitmap_len, 2867 sparity = kzalloc(sizeof(struct scrub_parity) + 2 * bitmap_len,
2866 GFP_NOFS); 2868 GFP_NOFS);
@@ -3070,7 +3072,6 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
3070 int slot; 3072 int slot;
3071 u64 nstripes; 3073 u64 nstripes;
3072 struct extent_buffer *l; 3074 struct extent_buffer *l;
3073 struct btrfs_key key;
3074 u64 physical; 3075 u64 physical;
3075 u64 logical; 3076 u64 logical;
3076 u64 logic_end; 3077 u64 logic_end;
@@ -3079,7 +3080,7 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
3079 int mirror_num; 3080 int mirror_num;
3080 struct reada_control *reada1; 3081 struct reada_control *reada1;
3081 struct reada_control *reada2; 3082 struct reada_control *reada2;
3082 struct btrfs_key key_start; 3083 struct btrfs_key key;
3083 struct btrfs_key key_end; 3084 struct btrfs_key key_end;
3084 u64 increment = map->stripe_len; 3085 u64 increment = map->stripe_len;
3085 u64 offset; 3086 u64 offset;
@@ -3158,21 +3159,21 @@ static noinline_for_stack int scrub_stripe(struct scrub_ctx *sctx,
3158 scrub_blocked_if_needed(fs_info); 3159 scrub_blocked_if_needed(fs_info);
3159 3160
3160 /* FIXME it might be better to start readahead at commit root */ 3161 /* FIXME it might be better to start readahead at commit root */
3161 key_start.objectid = logical; 3162 key.objectid = logical;
3162 key_start.type = BTRFS_EXTENT_ITEM_KEY; 3163 key.type = BTRFS_EXTENT_ITEM_KEY;
3163 key_start.offset = (u64)0; 3164 key.offset = (u64)0;
3164 key_end.objectid = logic_end; 3165 key_end.objectid = logic_end;
3165 key_end.type = BTRFS_METADATA_ITEM_KEY; 3166 key_end.type = BTRFS_METADATA_ITEM_KEY;
3166 key_end.offset = (u64)-1; 3167 key_end.offset = (u64)-1;
3167 reada1 = btrfs_reada_add(root, &key_start, &key_end); 3168 reada1 = btrfs_reada_add(root, &key, &key_end);
3168 3169
3169 key_start.objectid = BTRFS_EXTENT_CSUM_OBJECTID; 3170 key.objectid = BTRFS_EXTENT_CSUM_OBJECTID;
3170 key_start.type = BTRFS_EXTENT_CSUM_KEY; 3171 key.type = BTRFS_EXTENT_CSUM_KEY;
3171 key_start.offset = logical; 3172 key.offset = logical;
3172 key_end.objectid = BTRFS_EXTENT_CSUM_OBJECTID; 3173 key_end.objectid = BTRFS_EXTENT_CSUM_OBJECTID;
3173 key_end.type = BTRFS_EXTENT_CSUM_KEY; 3174 key_end.type = BTRFS_EXTENT_CSUM_KEY;
3174 key_end.offset = logic_end; 3175 key_end.offset = logic_end;
3175 reada2 = btrfs_reada_add(csum_root, &key_start, &key_end); 3176 reada2 = btrfs_reada_add(csum_root, &key, &key_end);
3176 3177
3177 if (!IS_ERR(reada1)) 3178 if (!IS_ERR(reada1))
3178 btrfs_reada_wait(reada1); 3179 btrfs_reada_wait(reada1);