Messages in this thread | | | Date | Fri, 27 Jan 2006 21:10:15 +0100 | From | Jens Axboe <> | Subject | Re: How to map high memory for block io |
| |
On Fri, Jan 27 2006, Pierre Ossman wrote: > Russell King wrote: > > > > I don't see what the problem is. A sg entry is a list of struct page > > pointers, an offset, and a size. As such, it can't describe a transfer > > which crosses a page because such a structure does not imply that one > > struct page follows another struct page. > > > > > > If the pages do not strictly follow each other then there is a lot of > broken code in the kernel. drivers/mmc/mmci.c and drivers/block/ub.c > being two occurences since both assume they can access the entire entry > through a single mapping.
Assuming that page idx and idx + 1 in a bio are contigious is a very bad one, no one has ever made any such guarantees. Besides, if you kmap() it, things change. The pages in a bio have nothing to do with each other, they are usually just a consequence of how the page cache ended up allocating. So completely random usually, once you get a little fragmentation.
Are you sure you are reading that code correctly? Code making such assumptions would be breaking pretty quickly.
-- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |