提交 1c76fb7b 编写于 作者: C Christoph Hellwig 提交者: David Sterba

btrfs: raid56: wait for I/O completion in submit_read_bios

In addition to setting up the end_io handler and submitting the bios in
submit_read_bios, also wait for them to be completed instead of waiting
for the completion manually in all three callers.

Rename submit_read_bios to submit_read_wait_bio_list to make it clear
it waits for the bios as well.
Reviewed-by: NQu Wenruo <wqu@suse.com>
Reviewed-by: NJohannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NDavid Sterba <dsterba@suse.com>
Signed-off-by: NDavid Sterba <dsterba@suse.com>
上级 4d762701
...@@ -1497,7 +1497,7 @@ static void raid_wait_read_end_io(struct bio *bio) ...@@ -1497,7 +1497,7 @@ static void raid_wait_read_end_io(struct bio *bio)
wake_up(&rbio->io_wait); wake_up(&rbio->io_wait);
} }
static void submit_read_bios(struct btrfs_raid_bio *rbio, static void submit_read_wait_bio_list(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list) struct bio_list *bio_list)
{ {
struct bio *bio; struct bio *bio;
...@@ -1514,6 +1514,8 @@ static void submit_read_bios(struct btrfs_raid_bio *rbio, ...@@ -1514,6 +1514,8 @@ static void submit_read_bios(struct btrfs_raid_bio *rbio,
} }
submit_bio(bio); submit_bio(bio);
} }
wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
} }
static int rmw_assemble_read_bios(struct btrfs_raid_bio *rbio, static int rmw_assemble_read_bios(struct btrfs_raid_bio *rbio,
...@@ -2016,8 +2018,7 @@ static int recover_rbio(struct btrfs_raid_bio *rbio) ...@@ -2016,8 +2018,7 @@ static int recover_rbio(struct btrfs_raid_bio *rbio)
if (ret < 0) if (ret < 0)
goto out; goto out;
submit_read_bios(rbio, &bio_list); submit_read_wait_bio_list(rbio, &bio_list);
wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
ret = recover_sectors(rbio); ret = recover_sectors(rbio);
...@@ -2213,8 +2214,7 @@ static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio) ...@@ -2213,8 +2214,7 @@ static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio)
if (ret < 0) if (ret < 0)
goto out; goto out;
submit_read_bios(rbio, &bio_list); submit_read_wait_bio_list(rbio, &bio_list);
wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
/* /*
* We may or may not have any corrupted sectors (including missing dev * We may or may not have any corrupted sectors (including missing dev
...@@ -2792,8 +2792,7 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio) ...@@ -2792,8 +2792,7 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio)
if (ret < 0) if (ret < 0)
goto cleanup; goto cleanup;
submit_read_bios(rbio, &bio_list); submit_read_wait_bio_list(rbio, &bio_list);
wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
/* 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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册