btrfs: open code set_io_stripe for RAID56
authorJohannes Thumshirn <johannes.thumshirn@wdc.com>
Wed, 13 Dec 2023 14:43:06 +0000 (06:43 -0800)
committerDavid Sterba <dsterba@suse.com>
Fri, 15 Dec 2023 22:03:59 +0000 (23:03 +0100)
Open code set_io_stripe() for RAID56, as it

a) uses a different method to calculate the stripe_index
b) doesn't need to go through raid-stripe-tree mapping code.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/volumes.c

index c79708df2a12e71d1a2ea00dc13b0bd768b9be63..8b858244f0a86b2f5153c89ce85d0edbb710e91c 100644 (file)
@@ -6670,13 +6670,15 @@ int btrfs_map_block(struct btrfs_fs_info *fs_info, enum btrfs_map_op op,
                        btrfs_stripe_nr_to_offset(io_geom.stripe_nr *
                                                  nr_data_stripes(map));
                for (int i = 0; i < io_geom.num_stripes; i++) {
-                       ret = set_io_stripe(fs_info, op, logical, length,
-                                           &bioc->stripes[i], map,
-                                           (i + io_geom.stripe_nr) % io_geom.num_stripes,
-                                           io_geom.stripe_offset,
-                                           io_geom.stripe_nr);
-                       if (ret < 0)
-                               break;
+                       struct btrfs_io_stripe *dst = &bioc->stripes[i];
+                       u32 stripe_index;
+
+                       stripe_index = (i + io_geom.stripe_nr) % io_geom.num_stripes;
+                       dst->dev = map->stripes[stripe_index].dev;
+                       dst->physical =
+                               map->stripes[stripe_index].physical +
+                               io_geom.stripe_offset +
+                               btrfs_stripe_nr_to_offset(io_geom.stripe_nr);
                }
        } else {
                /*