From 1c76fb7b31a43ad8b63faa3c6612b04eb3dea5d6 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Wed, 11 Jan 2023 07:23:27 +0100 Subject: [PATCH] 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: Qu Wenruo Reviewed-by: Johannes Thumshirn Signed-off-by: Christoph Hellwig Reviewed-by: David Sterba Signed-off-by: David Sterba --- fs/btrfs/raid56.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index 037dae1b7313..6c63f6428117 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c @@ -1497,7 +1497,7 @@ static void raid_wait_read_end_io(struct bio *bio) 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 *bio; @@ -1514,6 +1514,8 @@ static void submit_read_bios(struct btrfs_raid_bio *rbio, } 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, @@ -2016,8 +2018,7 @@ static int recover_rbio(struct btrfs_raid_bio *rbio) if (ret < 0) goto out; - submit_read_bios(rbio, &bio_list); - wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0); + submit_read_wait_bio_list(rbio, &bio_list); ret = recover_sectors(rbio); @@ -2213,8 +2214,7 @@ static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio) if (ret < 0) goto out; - submit_read_bios(rbio, &bio_list); - wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0); + submit_read_wait_bio_list(rbio, &bio_list); /* * 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) if (ret < 0) goto cleanup; - submit_read_bios(rbio, &bio_list); - wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0); + submit_read_wait_bio_list(rbio, &bio_list); /* We may have some failures, recover the failed sectors first. */ ret = recover_scrub_rbio(rbio); -- GitLab