diff options
Diffstat (limited to 'fs/btrfs/scrub.c')
-rw-r--r-- | fs/btrfs/scrub.c | 25 |
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); |