Commit 2f8e9140 authored by Liu Bo's avatar Liu Bo Committed by David Sterba

Btrfs: new helper btrfs_bio_clone_partial

This adds a new helper btrfs_bio_clone_partial, it'll allocate a cloned
bio that only owns a part of the original bio's data.
Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 015c1bd9
......@@ -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)
......
......@@ -467,6 +467,8 @@ btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
gfp_t gfp_flags);
struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs);
struct bio *btrfs_bio_clone(struct bio *bio, gfp_t gfp_mask);
struct bio *btrfs_bio_clone_partial(struct bio *orig, gfp_t gfp_mask,
int offset, int size);
struct btrfs_fs_info;
struct btrfs_inode;
......
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