Am 11.08.2011 16:24, schrieb Paolo Bonzini: > On 08/11/2011 03:29 PM, Stefan Hajnoczi wrote: >>>> >>>> What do you think about passing the residual bytes for short transfers? >>>> Should I look into updating BlockDriverCompletionFunc, or is the >>>> approach >>>> of patch 2 okay? If I have an excuse to learn more about Coccinelle, that >>>> can be fun.:) >> The bdrv_aio_readv() and bdrv_aio_writev() functions don't have the >> concept of residual bytes. They only work on fully completed I/O >> operations. If there is an error they pass -errno. > > But if a transfer was split due to failure of cpu_physical_memory_map, > and only the second part fails, you can have a short transfer and you > need to pass residual bytes back. The only way out of this is to make a > bounce buffer as big as all the unmappable parts of the S/G list, which > is undesirable of course. So the residual bytes are a general DMA > concept, not specific to SCSI. > >> Therefore I don't think BlockDriverCompletionFunc is the right type >> to add residual bytes to. > > Right, I would rather update BlockDriverCompletionFunc to pass the AIOCB > as a third parameter, and store the residual bytes in the DMAAIOCB (with > a getter that the completion function can use).
Isn't the DMAAIOCB already passed as opaque to the callback? Kevin