On Sat, Dec 08 2001, Adam J. Richter wrote:
> The following patch makes linux-2.5.1-pre7/drivers/block/DAC960.c
> compile. I'm not confident in my understanding of the new "bio" system,
> so it would be helpful if someone more knowledgeable about bio could
> check it. The changes are:
> 1. Delete references the nonexistant MaxSectorsPerRequest field.
> The code already sets RequestQueue->max_sectors.
> 2. Replace the undefined bio_size(BufferHead) with BufferHead->bi_size
> (in many places, which is why the diff is big).
> 3. Add a missing parameter in one place, changing
> BufferHeader->bi_end_io(BufferHeader, bio_sectors(BufferHeader))
> #3 is the one that I have the most doubts about.
It's not as easy as this. Note that you can have more than one page
entry in a bio, so if you simply use bio_data() on each bio and then
jump to the next through bi_next, then you are discarding every page but
the first one.
You want to do something like this:
bio_for_each_segment(bio_vec, bio, i)
/* handle each bio_vec */
DAC960 needs a huge cleanup to support highmem as well, Virtual_to_Bus32
and Virtual_to_Bus64, yuck, chest pains.
As a reference, read drivers/block/cciss.c for example which I've
converted to use the blk_rq_map_sg interface. Basically you don't have
to worry about any of this. You can check ide-dma.c too, note how easy
it is to setup a scatterlist mapping for DMA from a request now:
* map the request into a scatterlist
nr_sg_entries = blk_rq_map_sg(q, rq, sg_table);
* map the scatterlist pages for streaming dma
sg_nents = pci_map_sg(dev, sg_table, nr_sg_entries, data_dir);
-- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to email@example.com More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Dec 15 2001 - 21:00:14 EST