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: Christoph Hellwig <hch@lst.de> Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
6acafd1eff
Коммит
6e707bcd1f
|
@ -2659,8 +2659,9 @@ readpage_ok:
|
|||
}
|
||||
|
||||
/*
|
||||
* this allocates from the btrfs_bioset. We're returning a bio right now
|
||||
* but you can call btrfs_io_bio for the appropriate container_of magic
|
||||
* The following helpers allocate a bio. As it's backed by a bioset, it'll
|
||||
* never fail. We're returning a bio right now but you can call btrfs_io_bio
|
||||
* for the appropriate container_of magic
|
||||
*/
|
||||
struct bio *
|
||||
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;
|
||||
|
||||
bio = bio_alloc_bioset(gfp_flags, nr_vecs, btrfs_bioset);
|
||||
|
||||
if (bio == NULL && (current->flags & PF_MEMALLOC)) {
|
||||
while (!bio && (nr_vecs /= 2)) {
|
||||
bio = bio_alloc_bioset(gfp_flags,
|
||||
nr_vecs, btrfs_bioset);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -2694,30 +2685,27 @@ struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask)
|
|||
struct btrfs_io_bio *btrfs_bio;
|
||||
struct bio *new;
|
||||
|
||||
/* Bio allocation backed by a bioset does not fail */
|
||||
new = bio_clone_fast(bio, gfp_mask, btrfs_bioset);
|
||||
if (new) {
|
||||
btrfs_bio = btrfs_io_bio(new);
|
||||
btrfs_bio->csum = NULL;
|
||||
btrfs_bio->csum_allocated = NULL;
|
||||
btrfs_bio->end_io = NULL;
|
||||
btrfs_bio->iter = bio->bi_iter;
|
||||
}
|
||||
btrfs_bio = btrfs_io_bio(new);
|
||||
btrfs_bio->csum = NULL;
|
||||
btrfs_bio->csum_allocated = NULL;
|
||||
btrfs_bio->end_io = NULL;
|
||||
btrfs_bio->iter = bio->bi_iter;
|
||||
return new;
|
||||
}
|
||||
|
||||
/* this also allocates from the btrfs_bioset */
|
||||
struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
|
||||
{
|
||||
struct btrfs_io_bio *btrfs_bio;
|
||||
struct bio *bio;
|
||||
|
||||
/* Bio allocation backed by a bioset does not fail */
|
||||
bio = bio_alloc_bioset(gfp_mask, nr_iovecs, btrfs_bioset);
|
||||
if (bio) {
|
||||
btrfs_bio = btrfs_io_bio(bio);
|
||||
btrfs_bio->csum = NULL;
|
||||
btrfs_bio->csum_allocated = NULL;
|
||||
btrfs_bio->end_io = NULL;
|
||||
}
|
||||
btrfs_bio = btrfs_io_bio(bio);
|
||||
btrfs_bio->csum = NULL;
|
||||
btrfs_bio->csum_allocated = NULL;
|
||||
btrfs_bio->end_io = NULL;
|
||||
return bio;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче