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) ...@@ -2674,14 +2674,12 @@ static int recover_scrub_rbio(struct btrfs_raid_bio *rbio)
return ret; return ret;
} }
static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio, static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio)
struct bio_list *bio_list)
{ {
struct bio_list bio_list = BIO_EMPTY_LIST;
int total_sector_nr; int total_sector_nr;
int ret = 0; int ret = 0;
ASSERT(bio_list_size(bio_list) == 0);
/* Build a list of bios to read all the missing parts. */ /* Build a list of bios to read all the missing parts. */
for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors; for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
total_sector_nr++) { total_sector_nr++) {
...@@ -2710,42 +2708,38 @@ static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio, ...@@ -2710,42 +2708,38 @@ static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio,
if (sector->uptodate) if (sector->uptodate)
continue; 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); sectornr, REQ_OP_READ);
if (ret) if (ret) {
goto error; bio_list_put(&bio_list);
return ret;
}
} }
submit_read_wait_bio_list(rbio, &bio_list);
return 0; return 0;
error:
bio_list_put(bio_list);
return ret;
} }
static int scrub_rbio(struct btrfs_raid_bio *rbio) static int scrub_rbio(struct btrfs_raid_bio *rbio)
{ {
bool need_check = false; bool need_check = false;
struct bio_list bio_list;
int sector_nr; int sector_nr;
int ret; int ret;
bio_list_init(&bio_list);
ret = alloc_rbio_essential_pages(rbio); ret = alloc_rbio_essential_pages(rbio);
if (ret) if (ret)
goto cleanup; return ret;
bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors); 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) if (ret < 0)
goto cleanup; return ret;
submit_read_wait_bio_list(rbio, &bio_list);
/* We may have some failures, recover the failed sectors first. */ /* We may have some failures, recover the failed sectors first. */
ret = recover_scrub_rbio(rbio); ret = recover_scrub_rbio(rbio);
if (ret < 0) if (ret < 0)
goto cleanup; return ret;
/* /*
* We have every sector properly prepared. Can finish the scrub * We have every sector properly prepared. Can finish the scrub
...@@ -2763,10 +2757,6 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio) ...@@ -2763,10 +2757,6 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio)
} }
} }
return ret; return ret;
cleanup:
bio_list_put(&bio_list);
return ret;
} }
static void scrub_rbio_work_locked(struct work_struct *work) 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