On 17/12/2015 09:47, Alex Pyrgiotis wrote: >> > Which commands have large payloads and are on the data path, for >> > scsi-block? Or is the use case just scsi-generic (e.g. tape devices?)? >> > >> > (Just trying to understand before I dive into the patches). > Sure, no problem. The commands that have large payloads and are on the > data path are the classic SCSI READ/WRITE commands. Usually, these > commands are implemented with vectored reads/writes, which utilize the > controller's scatter-gather list. > > However, when opening a "scsi-block" device with the default cache > policy (cache=writeback), QEMU fallbacks to the "scsi-generic" functions > (i.e, SG_IO ioctl requests) for reading/writing data [1]. In this case, > the data are copied in a bounce buffer, which is the issue that this > patch tackles.
Right, I forgot about that. However, falling back to scsi-generic effectively means that scsi-block is always O_DIRECT/cache=none. So why not just specify cache=none? We can improve the code to print a warning if you don't. (It needs some care: iscsi never caches, independent of the cache= argument, so we don't want to warn for it. But it can be done). Paolo