summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/raid56.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2023-01-11 07:23:28 +0100
committerDavid Sterba <dsterba@suse.com>2023-02-15 19:38:54 +0100
commit801fcfc5d790f4a9be2897713bd6dd08bed253f1 (patch)
tree12553ae747e3e6366b7d099114e71df8b24d1690 /fs/btrfs/raid56.c
parentbtrfs: raid56: wait for I/O completion in submit_read_bios (diff)
downloadlinux-801fcfc5d790f4a9be2897713bd6dd08bed253f1.tar.xz
linux-801fcfc5d790f4a9be2897713bd6dd08bed253f1.zip
btrfs: raid56: add a bio_list_put helper
Add a helper to put all bios in a list. This does not need to be added to block layer as there are no other users of such code. Reviewed-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to '')
-rw-r--r--fs/btrfs/raid56.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
index 6c63f6428117..6108c06f16fc 100644
--- a/fs/btrfs/raid56.c
+++ b/fs/btrfs/raid56.c
@@ -1183,6 +1183,14 @@ not_found:
trace_info->stripe_nr = -1;
}
+static inline void bio_list_put(struct bio_list *bio_list)
+{
+ struct bio *bio;
+
+ while ((bio = bio_list_pop(bio_list)))
+ bio_put(bio);
+}
+
/* Generate PQ for one vertical stripe. */
static void generate_pq_vertical(struct btrfs_raid_bio *rbio, int sectornr)
{
@@ -1228,7 +1236,6 @@ static void generate_pq_vertical(struct btrfs_raid_bio *rbio, int sectornr)
static int rmw_assemble_write_bios(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list)
{
- struct bio *bio;
/* The total sector number inside the full stripe. */
int total_sector_nr;
int sectornr;
@@ -1317,8 +1324,7 @@ static int rmw_assemble_write_bios(struct btrfs_raid_bio *rbio,
return 0;
error:
- while ((bio = bio_list_pop(bio_list)))
- bio_put(bio);
+ bio_list_put(bio_list);
return -EIO;
}
@@ -1521,7 +1527,6 @@ static void submit_read_wait_bio_list(struct btrfs_raid_bio *rbio,
static int rmw_assemble_read_bios(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list)
{
- struct bio *bio;
int total_sector_nr;
int ret = 0;
@@ -1548,8 +1553,7 @@ static int rmw_assemble_read_bios(struct btrfs_raid_bio *rbio,
return 0;
cleanup:
- while ((bio = bio_list_pop(bio_list)))
- bio_put(bio);
+ bio_list_put(bio_list);
return ret;
}
@@ -1946,7 +1950,6 @@ out:
static int recover_assemble_read_bios(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list)
{
- struct bio *bio;
int total_sector_nr;
int ret = 0;
@@ -1988,16 +1991,13 @@ static int recover_assemble_read_bios(struct btrfs_raid_bio *rbio,
}
return 0;
error:
- while ((bio = bio_list_pop(bio_list)))
- bio_put(bio);
-
+ bio_list_put(bio_list);
return -EIO;
}
static int recover_rbio(struct btrfs_raid_bio *rbio)
{
struct bio_list bio_list;
- struct bio *bio;
int ret;
/*
@@ -2023,9 +2023,7 @@ static int recover_rbio(struct btrfs_raid_bio *rbio)
ret = recover_sectors(rbio);
out:
- while ((bio = bio_list_pop(&bio_list)))
- bio_put(bio);
-
+ bio_list_put(&bio_list);
return ret;
}
@@ -2198,7 +2196,6 @@ no_csum:
static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio)
{
struct bio_list bio_list;
- struct bio *bio;
int ret;
bio_list_init(&bio_list);
@@ -2223,9 +2220,7 @@ static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio)
ret = recover_sectors(rbio);
return ret;
out:
- while ((bio = bio_list_pop(&bio_list)))
- bio_put(bio);
-
+ bio_list_put(&bio_list);
return ret;
}
@@ -2496,7 +2491,6 @@ static int finish_parity_scrub(struct btrfs_raid_bio *rbio, int need_check)
struct sector_ptr p_sector = { 0 };
struct sector_ptr q_sector = { 0 };
struct bio_list bio_list;
- struct bio *bio;
int is_replace = 0;
int ret;
@@ -2627,8 +2621,7 @@ submit_write:
return 0;
cleanup:
- while ((bio = bio_list_pop(&bio_list)))
- bio_put(bio);
+ bio_list_put(&bio_list);
return ret;
}
@@ -2726,7 +2719,6 @@ out:
static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio,
struct bio_list *bio_list)
{
- struct bio *bio;
int total_sector_nr;
int ret = 0;
@@ -2767,8 +2759,7 @@ static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio,
}
return 0;
error:
- while ((bio = bio_list_pop(bio_list)))
- bio_put(bio);
+ bio_list_put(bio_list);
return ret;
}
@@ -2778,7 +2769,6 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio)
struct bio_list bio_list;
int sector_nr;
int ret;
- struct bio *bio;
bio_list_init(&bio_list);
@@ -2817,9 +2807,7 @@ static int scrub_rbio(struct btrfs_raid_bio *rbio)
return ret;
cleanup:
- while ((bio = bio_list_pop(&bio_list)))
- bio_put(bio);
-
+ bio_list_put(&bio_list);
return ret;
}