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.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c
index 221fd5c48736..59caf8fcd1c7 100644
--- a/fs/btrfs/scrub.c
+++ b/fs/btrfs/scrub.c
@@ -452,7 +452,7 @@ static void scrub_fixup(struct scrub_bio *sbio, int ix)
452 * first find a good copy 452 * first find a good copy
453 */ 453 */
454 for (i = 0; i < multi->num_stripes; ++i) { 454 for (i = 0; i < multi->num_stripes; ++i) {
455 if (i == sbio->spag[ix].mirror_num) 455 if (i + 1 == sbio->spag[ix].mirror_num)
456 continue; 456 continue;
457 457
458 if (scrub_fixup_io(READ, multi->stripes[i].dev->bdev, 458 if (scrub_fixup_io(READ, multi->stripes[i].dev->bdev,
@@ -930,21 +930,21 @@ static noinline_for_stack int scrub_stripe(struct scrub_dev *sdev,
930 if (map->type & BTRFS_BLOCK_GROUP_RAID0) { 930 if (map->type & BTRFS_BLOCK_GROUP_RAID0) {
931 offset = map->stripe_len * num; 931 offset = map->stripe_len * num;
932 increment = map->stripe_len * map->num_stripes; 932 increment = map->stripe_len * map->num_stripes;
933 mirror_num = 0; 933 mirror_num = 1;
934 } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) { 934 } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
935 int factor = map->num_stripes / map->sub_stripes; 935 int factor = map->num_stripes / map->sub_stripes;
936 offset = map->stripe_len * (num / map->sub_stripes); 936 offset = map->stripe_len * (num / map->sub_stripes);
937 increment = map->stripe_len * factor; 937 increment = map->stripe_len * factor;
938 mirror_num = num % map->sub_stripes; 938 mirror_num = num % map->sub_stripes + 1;
939 } else if (map->type & BTRFS_BLOCK_GROUP_RAID1) { 939 } else if (map->type & BTRFS_BLOCK_GROUP_RAID1) {
940 increment = map->stripe_len; 940 increment = map->stripe_len;
941 mirror_num = num % map->num_stripes; 941 mirror_num = num % map->num_stripes + 1;
942 } else if (map->type & BTRFS_BLOCK_GROUP_DUP) { 942 } else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
943 increment = map->stripe_len; 943 increment = map->stripe_len;
944 mirror_num = num % map->num_stripes; 944 mirror_num = num % map->num_stripes + 1;
945 } else { 945 } else {
946 increment = map->stripe_len; 946 increment = map->stripe_len;
947 mirror_num = 0; 947 mirror_num = 1;
948 } 948 }
949 949
950 path = btrfs_alloc_path(); 950 path = btrfs_alloc_path();