[Drbd-dev] Re: bio_split()...

Jens Axboe axboe at suse.de
Tue Mar 15 21:24:39 CET 2005


On Tue, Mar 15 2005, Philipp Reisner wrote:
> Hi Jens,
> 
> bio_split only works for bios with a single page...
> 
> [ from bio.c: ]
> /*
>  * split a bio - only worry about a bio with a single page
>  * in it's iovec
>  */
> struct bio_pair *bio_split(struct bio *bi, mempool_t *pool, int first_sectors)
> {
>  struct bio_pair *bp = mempool_alloc(pool, GFP_NOIO);
> 
>  if (!bp)
>   return bp;
> 
>  BUG_ON(bi->bi_vcnt != 1);
> [...]
> 
> In DRBD-0.8 I want to split BIO's that cross a 16 MB boundary. 
> In DRBD-0.8 I accept BIOs with more than one page (currently up to
> 32 kB in a single BIO), I thought that bio_split is here
> to handle such situations....
> 
> Is there an other way to go ?
> Would you accept a patch that would make bio_split to work with bigger
> BIOs ?

The trick is usually to avoid such build-up in the first place - does
the merge_bvec_fn() not work for you there? bio_split() is just there to
cater to cases of a single page nature, because you cannot refuse to add
a single page.

-- 
Jens Axboe



More information about the drbd-dev mailing list