Re: Patch(?): linux-2.5.1-pre7/drivers/block/DAC960.c compilation fixes

Jens Axboe (axboe@suse.de)
Sun, 9 Dec 2001 12:36:13 +0100


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)
> to
> 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:

rq_for_each_bio(bio, rq)
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 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/