btrfs: raid56: make alloc_rbio_essential_pages() subpage compatible
authorQu Wenruo <wqu@suse.com>
Fri, 1 Apr 2022 11:23:30 +0000 (19:23 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 May 2022 15:03:15 +0000 (17:03 +0200)
The non-compatible part is only the bitmap iteration part, now the
bitmap size is extended to rbio::stripe_nsectors, not the old
rbio::stripe_npages.

Since we're here, also slightly improve the function by:

- Rename @i to @stripe
- Rename @bit to @sectornr
- Move @page and @index into the inner loop

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/raid56.c

index 333dcb7..b30ec77 100644 (file)
@@ -2415,14 +2415,16 @@ void raid56_add_scrub_pages(struct btrfs_raid_bio *rbio, struct page *page,
  */
 static int alloc_rbio_essential_pages(struct btrfs_raid_bio *rbio)
 {
-       int i;
-       int bit;
-       int index;
-       struct page *page;
+       const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
+       int stripe;
+       int sectornr;
+
+       for_each_set_bit(sectornr, rbio->dbitmap, rbio->stripe_nsectors) {
+               for (stripe = 0; stripe < rbio->real_stripes; stripe++) {
+                       struct page *page;
+                       int index = (stripe * rbio->stripe_nsectors + sectornr) *
+                                   sectorsize >> PAGE_SHIFT;
 
-       for_each_set_bit(bit, rbio->dbitmap, rbio->stripe_npages) {
-               for (i = 0; i < rbio->real_stripes; i++) {
-                       index = i * rbio->stripe_npages + bit;
                        if (rbio->stripe_pages[index])
                                continue;