blk_queue_dma_drain
Prev | Chapter 14. Block Devices | Next

## Name

blk_queue_dma_drain — Set up a drain buffer for excess dma.

## Synopsis

`int blk_queue_dma_drain (` | struct request_queue * q,
| dma_drain_needed_fn * dma_drain_needed,
| void * buf,
| unsigned int size`)`;

## Arguments

`q`

  the request queue for the device

`dma_drain_needed`

  fn which returns non-zero if drain is necessary

`buf`

  physically contiguous buffer

`size`

  size of the buffer in bytes

## Description

Some devices have excess DMA problems and can't simply discard (or zero fill) the unwanted piece of the transfer. They have to have a real area of memory to transfer it into. The use case for this is ATAPI devices in DMA mode. If the packet command causes a transfer bigger than the transfer size some HBAs will lock up if there aren't DMA elements to contain the excess transfer. What this API does is adjust the queue so that the buf is always appended silently to the scatterlist.

## Note

This routine adjusts max_hw_segments to make room for appending the drain buffer. If you call `blk_queue_max_segments` after calling this routine, you must set the limit to one fewer than your device can support otherwise there won't be room for the drain buffer.

Prev | Up | Next
blk_queue_update_dma_pad | Home | blk_queue_segment_boundary