Re: [PATCHSET pata-2.6] ide: rq->buffer, data, special andmisc cleanups

From: James Bottomley
Date: Mon Apr 13 2009 - 10:17:17 EST


On Mon, 2009-04-13 at 04:31 -0400, Jeff Garzik wrote:
> >> What is the multi-device problem with bio?
> >
> > Well, if it works nicely, I guess that we don't have something like
> > drivers/dm/{dm-bio-record.h, dm-bio-list.h}, btrfs_multi_bio struct,
> > or md's own page carrier?
>
> It was an honest question. I am seeking information, not denying your
> argument.

I think it wasn't quite designed like that. The original designed
carrier of pages was the bio_vec array. The bio was designed to carry
the bio_vec into the top end of block. bio_vec is incredibly
lightweight (it's more like a scatterlist), but bio is a lot heavier and
now has a lot of quirky initialisers (like call backs and merge counts)
that need to be set correctly, making it a more difficult think to use
generically. bio is really designed to be the merge unit for requests
not a generic carrier of pages.

The final irony is that most of the page list mappings we do want to go
straight to requests, making the bio complexity even more superfluous.

> What, specifically, is this multi-device problem with bio, please?

The multi device problem is that it's very hard to split a bio up again
once we've assembled it, so if you get a single bio whose I/O crosses
multiple devices in md or dm, there's a lot of work that has to go on
behind the scenes to get the split to happen because we need one bio per
underlying device that we send I/O to.

James


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/