From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=55684 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PJPMT-0000Sd-3D for qemu-devel@nongnu.org; Fri, 19 Nov 2010 06:42:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PJPMO-0007az-45 for qemu-devel@nongnu.org; Fri, 19 Nov 2010 06:42:36 -0500 Received: from mx1.redhat.com ([209.132.183.28]:25010) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PJPMN-0007am-Tc for qemu-devel@nongnu.org; Fri, 19 Nov 2010 06:42:32 -0500 Message-ID: <4CE662D8.7020709@redhat.com> Date: Fri, 19 Nov 2010 12:43:20 +0100 From: Kevin Wolf MIME-Version: 1.0 Subject: Re: [Qemu-devel] Re: [PATCH 09/16] scsi-disk: Allocate iovec dynamically References: <20101118144723.61032F90AB@ochil.suse.de> <4CE54755.8010205@redhat.com> <4CE5543C.2080701@suse.de> In-Reply-To: <4CE5543C.2080701@suse.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Hannes Reinecke Cc: stefanha@gmail.com, Gerd Hoffmann , nab@linux-iscsi.org, qemu-devel@nongnu.org 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