mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
block: export bio_split_rw
bio_split_rw can be used by file systems to split and incoming write bio into multiple bios fitting the hardware limit for use as ZONE_APPEND bios. Export it for initial use in btrfs. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
committed by
David Sterba
parent
c9a43aaf09
commit
fd8f8ede23
@@ -276,7 +276,7 @@ static bool bvec_split_segs(const struct queue_limits *lim,
|
|||||||
* responsible for ensuring that @bs is only destroyed after processing of the
|
* responsible for ensuring that @bs is only destroyed after processing of the
|
||||||
* split bio has finished.
|
* split bio has finished.
|
||||||
*/
|
*/
|
||||||
static struct bio *bio_split_rw(struct bio *bio, const struct queue_limits *lim,
|
struct bio *bio_split_rw(struct bio *bio, const struct queue_limits *lim,
|
||||||
unsigned *segs, struct bio_set *bs, unsigned max_bytes)
|
unsigned *segs, struct bio_set *bs, unsigned max_bytes)
|
||||||
{
|
{
|
||||||
struct bio_vec bv, bvprv, *bvprvp = NULL;
|
struct bio_vec bv, bvprv, *bvprvp = NULL;
|
||||||
@@ -336,6 +336,7 @@ split:
|
|||||||
bio_clear_polled(bio);
|
bio_clear_polled(bio);
|
||||||
return bio_split(bio, bytes >> SECTOR_SHIFT, GFP_NOIO, bs);
|
return bio_split(bio, bytes >> SECTOR_SHIFT, GFP_NOIO, bs);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(bio_split_rw);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __bio_split_to_limits - split a bio to fit the queue limits
|
* __bio_split_to_limits - split a bio to fit the queue limits
|
||||||
|
|||||||
@@ -12,6 +12,8 @@
|
|||||||
|
|
||||||
#define BIO_MAX_VECS 256U
|
#define BIO_MAX_VECS 256U
|
||||||
|
|
||||||
|
struct queue_limits;
|
||||||
|
|
||||||
static inline unsigned int bio_max_segs(unsigned int nr_segs)
|
static inline unsigned int bio_max_segs(unsigned int nr_segs)
|
||||||
{
|
{
|
||||||
return min(nr_segs, BIO_MAX_VECS);
|
return min(nr_segs, BIO_MAX_VECS);
|
||||||
@@ -375,6 +377,8 @@ static inline void bip_set_seed(struct bio_integrity_payload *bip,
|
|||||||
void bio_trim(struct bio *bio, sector_t offset, sector_t size);
|
void bio_trim(struct bio *bio, sector_t offset, sector_t size);
|
||||||
extern struct bio *bio_split(struct bio *bio, int sectors,
|
extern struct bio *bio_split(struct bio *bio, int sectors,
|
||||||
gfp_t gfp, struct bio_set *bs);
|
gfp_t gfp, struct bio_set *bs);
|
||||||
|
struct bio *bio_split_rw(struct bio *bio, const struct queue_limits *lim,
|
||||||
|
unsigned *segs, struct bio_set *bs, unsigned max_bytes);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* bio_next_split - get next @sectors from a bio, splitting if necessary
|
* bio_next_split - get next @sectors from a bio, splitting if necessary
|
||||||
|
|||||||
Reference in New Issue
Block a user