|
|
@@ -2720,6 +2720,24 @@ struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
|
|
|
return bio;
|
|
|
}
|
|
|
|
|
|
+struct bio *btrfs_bio_clone_partial(struct bio *orig, gfp_t gfp_mask,
|
|
|
+ int offset, int size)
|
|
|
+{
|
|
|
+ struct bio *bio;
|
|
|
+ struct btrfs_io_bio *btrfs_bio;
|
|
|
+
|
|
|
+ /* this will never fail when it's backed by a bioset */
|
|
|
+ bio = bio_clone_fast(orig, gfp_mask, btrfs_bioset);
|
|
|
+ ASSERT(bio);
|
|
|
+
|
|
|
+ btrfs_bio = btrfs_io_bio(bio);
|
|
|
+ btrfs_bio->csum = NULL;
|
|
|
+ btrfs_bio->csum_allocated = NULL;
|
|
|
+ btrfs_bio->end_io = NULL;
|
|
|
+
|
|
|
+ bio_trim(bio, offset >> 9, size >> 9);
|
|
|
+ return bio;
|
|
|
+}
|
|
|
|
|
|
static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
|
|
|
unsigned long bio_flags)
|