Commit 3907ce29 authored by Qu Wenruo's avatar Qu Wenruo Committed by David Sterba
Browse files

btrfs: raid56: make alloc_rbio_essential_pages() subpage compatible



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: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent d4e28d9b
Loading
Loading
Loading
Loading
+9 −7
Original line number Diff line number Diff line
@@ -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;
	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;