Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+18 −0
Original line number Original line Diff line number Diff line
@@ -2720,6 +2720,24 @@ struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs)
	return bio;
	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,
static int __must_check submit_one_bio(struct bio *bio, int mirror_num,
				       unsigned long bio_flags)
				       unsigned long bio_flags)
+2 −0
Original line number Original line Diff line number Diff line
@@ -467,6 +467,8 @@ btrfs_bio_alloc(struct block_device *bdev, u64 first_sector, int nr_vecs,
		gfp_t gfp_flags);
		gfp_t gfp_flags);
struct bio *btrfs_io_bio_alloc(gfp_t gfp_mask, unsigned int nr_iovecs);
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(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_fs_info;
struct btrfs_inode;
struct btrfs_inode;