block: implement drain buffers
authorJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 10 Jan 2008 17:30:36 +0000 (11:30 -0600)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 28 Jan 2008 09:54:11 +0000 (10:54 +0100)
commitfa0ccd837e3dddb44c7db2f128a8bb7e4eabc21a
treeade071502f3e7cba423295890d828f0f301ad731
parent5d84070ee0a433620c57e85dac7f82faaec5fbb3
block: implement drain buffers

These DMA drain buffer implementations in drivers are pretty horrible
to do in terms of manipulating the scatterlist.  Plus they're being
done at least in drivers/ide and drivers/ata, so we now have code
duplication.

The one use case for this, as I understand it is AHCI controllers doing
PIO mode to mmc devices but translating this to DMA at the controller
level.

So, what about adding a callback to the block layer that permits the
adding of the drain buffer for the problem devices.  The idea is that
you'd do this in slave_configure after you find one of these devices.

The beauty of doing it in the block layer is that it quietly adds the
drain buffer to the end of the sg list, so it automatically gets mapped
(and unmapped) without anything unusual having to be done to the
scatterlist in driver/scsi or drivers/ata and without any alteration to
the transfer length.

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/elevator.c
block/ll_rw_blk.c
include/linux/blkdev.h