Am 18.11.2010 17:28, schrieb Hannes Reinecke: > On 11/18/2010 04:33 PM, Gerd Hoffmann wrote: >> Hi, >> >>> +static size_t scsi_req_iov_len(SCSIDiskReq *r) >>> +{ >>> + size_t iov_len = 0; >>> + int i; >>> + >>> + for (i = 0; i< r->iov_num; i++) >>> + iov_len += r->iov[i].iov_len; >>> + >>> + return iov_len; >>> +} >> >> You are aware that there is a QEMUIOVector type with helper functions >> which keeps track of both number of elements and total size? >> > Yes. But I'm passing passing in an entire iovec to the request. > However, the QEMUIOVector routines allow you to add only _one_ > element at a time, which is pretty wasteful here.
Does the iov need to be changed afterwards, or why doesn't qemu_iovec_init_external work here? > And I'm counting the resulting length of the iovec, which might have > been changed by read/write operations. For which there is no generic > function either. Can you explain which kind of read/write operations would change the iov? This is not completely clear to me. In general the same information that you're calculating here should be stored in qiov->size for a QEUMIOVector, but depending what changes you mean above it may not provide all operations you need. Kevin