questions regarding O_DIRECT with SCSI, and timeout handling
Hi,
i have two questions, for which i didn't manage to find a clear answer so far. i hope it is ok to ask them here.
1. when opening a SCSI disk block device file with O_DIRECT - am i guranteed that requests being send using read() or write() system calls are transfered all the way to the device before returning, or might they get queued in the low-level device driver? am i guaranteed that the read() or write() system call will return only when all the underlying SCSI Commands have completed fully? if not - is there a general way to achieve this, or do i have to resort to device-specific solutions?
does it matter if this is a real disk device, or a SCSI-over-something (E.g. iscsi) connection?
2. when sending a SCSI command, a time-out is being delivered with it from the SCSI mid-layer down to the lower-layer driver (HBA driver, iscsi driver, etc.). when does the system start to count the time - when the command was queued to the low-level driver? or when the low-level driver sent the command to the underlying device (e.g. an internal disk, external RAID, etc)? or does the system start to count the time before this?
thanks,
--guy