|
@@ -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;
|
|
|
}
|
|
|
|