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: Liu Bo <bo.li.liu@oracle.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
015c1bd9f1
commit
2f8e914042
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue