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-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html