Commit 52f0c198 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba

btrfs: raid56: submit the read bios from scrub_assemble_read_bios

Instead of filling in a bio_list and submitting the bios in the only
caller, do that in scrub_assemble_read_bios.  This removes the
need to pass the bio_list, and also makes it clear that the extra
bio_list cleanup in the caller is entirely pointless.  Rename the
function to scrub_read_bios to make it clear that the bios are not
only assembled.
Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 02efa3a6
......@@ -2674,14 +2674,12 @@ static int recover_scrub_rbio(struct btrfs_raid_bio *rbio)
return ret;
}
static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list)
static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio)
{
struct bio_list bio_list = BIO_EMPTY_LIST;
int total_sector_nr;
int ret = 0;
ASSERT(bio_list_size(bio_list) == 0);
/* Build a list of bios to read all the missing parts. */
for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
total_sector_nr++) {
......@@ -2710,42 +2708,38 @@ static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio,
if (sector->uptodate)
continue;
ret = rbio_add_io_sector(rbio, bio_list, sector, stripe,
ret = rbio_add_io_sector(rbio, &bio_list, sector, stripe,
sectornr, REQ_OP_READ);
if (ret)
goto error;
if (ret) {
bio_list_put(&bio_list);
return ret;
}
}
submit_read_wait_bio_list(rbio, &bio_list);
return 0;
error:
bio_list_put(bio_list);
return ret;
}
static int scrub_rbio(struct btrfs_raid_bio *rbio)
{
bool need_check = false;
struct bio_list bio_list;
int sector_nr;
int ret;
bio_list_init(&bio_list);
ret = alloc_rbio_essential_pages(rbio);
if (ret)
goto cleanup;
return ret;
bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors);
ret = scrub_assemble_read_bios(rbio, &bio_list);
ret = scrub_assemble_read_bios(rbio);
if (ret < 0)
goto cleanup;
submit_read_wait_bio_list(rbio, &bio_list);
return ret;
/* We may have some failures, recover the failed sectors first. */
ret = recover_scrub_rbio(rbio);
if (ret < 0)
goto cleanup;
return ret;
/*
* We have every sector properly prepared. Can finish the scrub
......@@ -2763,10 +2757,6 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio)
}
}
return ret;
cleanup:
bio_list_put(&bio_list);
return ret;
}
static void scrub_rbio_work_locked(struct work_struct *work)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment