mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
btrfs: raid56: avoid double for loop inside alloc_rbio_essential_pages()
The double loop is just checking if the page for the vertical stripe is allocated. We can easily convert it to single loop and get rid of @stripe variable. Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
ef340fccbe
commit
aee35e4bcc
@ -2380,23 +2380,22 @@ void raid56_add_scrub_pages(struct btrfs_raid_bio *rbio, struct page *page,
|
|||||||
static int alloc_rbio_essential_pages(struct btrfs_raid_bio *rbio)
|
static int alloc_rbio_essential_pages(struct btrfs_raid_bio *rbio)
|
||||||
{
|
{
|
||||||
const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
|
const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
|
||||||
int stripe;
|
int total_sector_nr;
|
||||||
int sectornr;
|
|
||||||
|
|
||||||
for_each_set_bit(sectornr, &rbio->dbitmap, rbio->stripe_nsectors) {
|
for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
|
||||||
for (stripe = 0; stripe < rbio->real_stripes; stripe++) {
|
total_sector_nr++) {
|
||||||
struct page *page;
|
struct page *page;
|
||||||
int index = (stripe * rbio->stripe_nsectors + sectornr) *
|
int sectornr = total_sector_nr % rbio->stripe_nsectors;
|
||||||
sectorsize >> PAGE_SHIFT;
|
int index = (total_sector_nr * sectorsize) >> PAGE_SHIFT;
|
||||||
|
|
||||||
if (rbio->stripe_pages[index])
|
if (!test_bit(sectornr, &rbio->dbitmap))
|
||||||
continue;
|
continue;
|
||||||
|
if (rbio->stripe_pages[index])
|
||||||
page = alloc_page(GFP_NOFS);
|
continue;
|
||||||
if (!page)
|
page = alloc_page(GFP_NOFS);
|
||||||
return -ENOMEM;
|
if (!page)
|
||||||
rbio->stripe_pages[index] = page;
|
return -ENOMEM;
|
||||||
}
|
rbio->stripe_pages[index] = page;
|
||||||
}
|
}
|
||||||
index_stripe_sectors(rbio);
|
index_stripe_sectors(rbio);
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user