From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38172) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkEam-0003yY-09 for qemu-devel@nongnu.org; Wed, 05 Jun 2013 10:21:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UkEak-0006f8-Rj for qemu-devel@nongnu.org; Wed, 05 Jun 2013 10:21:35 -0400 Received: from mail-wg0-x229.google.com ([2a00:1450:400c:c00::229]:58218) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UkEak-0006f0-La for qemu-devel@nongnu.org; Wed, 05 Jun 2013 10:21:34 -0400 Received: by mail-wg0-f41.google.com with SMTP id k13so4950695wgh.0 for ; Wed, 05 Jun 2013 07:21:33 -0700 (PDT) Date: Wed, 5 Jun 2013 16:21:27 +0200 From: Stefan Hajnoczi Message-ID: <20130605142127.GH31478@stefanha-thinkpad.muc.redhat.com> References: <1369908025-9556-1-git-send-email-wdongxu@linux.vnet.ibm.com> <1369908025-9556-8-git-send-email-wdongxu@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1369908025-9556-8-git-send-email-wdongxu@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [PATCH V19 7/8] add-cow file format core code. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Dongxu Wang Cc: kwolf@redhat.com, wdongxu@cn.ibm.com, qemu-devel@nongnu.org, stefanha@redhat.com On Thu, May 30, 2013 at 06:00:24PM +0800, Dongxu Wang wrote: > +static coroutine_fn int add_cow_co_writev(BlockDriverState *bs, > + int64_t sector_num, > + int remaining_sectors, > + QEMUIOVector *qiov) > +{ > + BDRVAddCowState *s = bs->opaque; > + int ret = 0, i; > + QEMUIOVector hd_qiov; > + uint8_t *table; > + uint64_t offset; > + int mask = s->cluster_sectors - 1; > + int cluster_mask = s->cluster_size - 1; > + AddCowMeta *meta = NULL; > + > + if (remaining_sectors == 0) { > + return ret; > + } > + > + qemu_co_mutex_lock(&s->lock); > + > + meta = g_malloc0(sizeof(*meta)); > +again: > + *meta = (AddCowMeta) { > + .next = QLIST_FIRST(&s->cluster_allocs), > + .start_sector = sector_num, > + .remaining_sectors = remaining_sectors, > + }; > + if (handle_dependencies(bs, sector_num, remaining_sectors) == -EAGAIN) { > + goto again; > + } > + qemu_co_queue_init(&meta->dependent_requests); > + QLIST_INSERT_HEAD(&s->cluster_allocs, meta, next_in_flight); > + qemu_iovec_init(&hd_qiov, qiov->niov); hd_qiov is unused. > + ret = bdrv_co_writev(s->image_hd, sector_num, remaining_sectors, qiov); s->lock is held so write requests block other requests, this is not parallel.