Commit 6e707bcd authored by David Sterba's avatar David Sterba

btrfs: bioset allocations will never fail, adapt our helpers

Christoph pointed out that bio allocations backed by a bioset will never
fail.  As we always use a bioset for all bio allocations, we can skip
the error handling.  This patch adjusts our low-level helpers, the
cascaded changes to all callers will come next.

CC: Liu Bo <bo.li.liu@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAnand Jain <anand.jain@oracle.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 6acafd1e
...@@ -2659,8 +2659,9 @@ static void end_bio_extent_readpage(struct bio *bio) ...@@ -2659,8 +2659,9 @@ static void end_bio_extent_readpage(struct bio *bio)
} }
/* /*
* this allocates from the btrfs_bioset. We're returning a bio right now * The following helpers allocate a bio. As it's backed by a bioset, it'll
* but you can call btrfs_io_bio for the appropriate container_of magic * never fail. We're returning a bio right now but you can call btrfs_io_bio
* for the appropriate container_of magic
*/ */
struct bio * struct bio *
btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs, btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
...@@ -2670,22 +2671,12 @@ btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs, ...@@ -2670,22 +2671,12 @@ btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
struct bio *bio; struct bio *bio;
bio = bio_alloc_bioset(gfp_flags, nr_vecs, btrfs_bioset); bio = bio_alloc_bioset(gfp_flags, nr_vecs, btrfs_bioset);
bio->bi_bdev = bdev;
if (bio == NULL && (current->flags & PF_MEMALLOC)) { bio->bi_iter.bi_sector = first_sector;
while (!bio && (nr_vecs /= 2)) { btrfs_bio = btrfs_io_bio(bio);
bio = bio_alloc_bioset(gfp_flags, btrfs_bio->csum = NULL;
nr_vecs, btrfs_bioset); btrfs_bio->csum_allocated = NULL;
} btrfs_bio->end_io = NULL;
}
if (bio) {
bio->bi_bdev = bdev;
bio->bi_iter.bi_sector = first_sector;
btrfs_bio = btrfs_io_bio(bio);
btrfs_bio->csum = NULL;
btrfs_bio->csum_allocated = NULL;
btrfs_bio->end_io = NULL;
}
return bio; return bio;
} }
...@@ -2694,30 +2685,27 @@ struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask) ...@@ -2694,30 +2685,27 @@ struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask)
struct btrfs_io_bio *btrfs_bio; struct btrfs_io_bio *btrfs_bio;
struct bio *new; struct bio *new;
/* Bio allocation backed by a bioset does not fail */
new = bio_clone_fast(bio, gfp_mask, btrfs_bioset); new = bio_clone_fast(bio, gfp_mask, btrfs_bioset);
if (new) { btrfs_bio = btrfs_io_bio(new);
btrfs_bio = btrfs_io_bio(new); btrfs_bio->csum = NULL;
btrfs_bio->csum = NULL; btrfs_bio->csum_allocated = NULL;
btrfs_bio->csum_allocated = NULL; btrfs_bio->end_io = NULL;
btrfs_bio->end_io = NULL; btrfs_bio->iter = bio->bi_iter;
btrfs_bio->iter = bio->bi_iter;
}
return new; return new;
} }
/* this also allocates from the btrfs_bioset */
struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs) struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
{ {
struct btrfs_io_bio *btrfs_bio; struct btrfs_io_bio *btrfs_bio;
struct bio *bio; struct bio *bio;
/* Bio allocation backed by a bioset does not fail */
bio = bio_alloc_bioset(gfp_mask, nr_iovecs, btrfs_bioset); bio = bio_alloc_bioset(gfp_mask, nr_iovecs, btrfs_bioset);
if (bio) { btrfs_bio = btrfs_io_bio(bio);
btrfs_bio = btrfs_io_bio(bio); btrfs_bio->csum = NULL;
btrfs_bio->csum = NULL; btrfs_bio->csum_allocated = NULL;
btrfs_bio->csum_allocated = NULL; btrfs_bio->end_io = NULL;
btrfs_bio->end_io = NULL;
}
return bio; return bio;
} }
......
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