From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40653) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHDVb-0003eZ-45 for qemu-devel@nongnu.org; Wed, 04 Sep 2013 09:52:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VHDVV-0007Q6-Ky for qemu-devel@nongnu.org; Wed, 04 Sep 2013 09:52:35 -0400 Received: from mail-ee0-x22b.google.com ([2a00:1450:4013:c00::22b]:46483) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VHDVV-0007Pw-DR for qemu-devel@nongnu.org; Wed, 04 Sep 2013 09:52:29 -0400 Received: by mail-ee0-f43.google.com with SMTP id e52so196241eek.30 for ; Wed, 04 Sep 2013 06:52:28 -0700 (PDT) Date: Wed, 4 Sep 2013 15:52:26 +0200 From: Stefan Hajnoczi Message-ID: <20130904135226.GC12733@stefanha-thinkpad.redhat.com> References: <1377220491-19954-1-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1377220491-19954-1-git-send-email-famz@redhat.com> Subject: Re: [Qemu-devel] [PATCH v6 0/8] Implement reference count for BlockDriverState List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng Cc: kwolf@redhat.com, jcody@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, pbonzini@redhat.com, xiawenc@linux.vnet.ibm.com On Fri, Aug 23, 2013 at 09:14:43AM +0800, Fam Zheng wrote: > BlockDriverState lifecycle management is needed by future features such as > image fleecing and blockdev-add. This series adds reference count to > BlockDriverState. > > The first two patches clean up two odd BlockDriverState use cases, so all code > uses bdrv_new() to create BlockDriverState instance. > > Then implemented bdrv_ref() and bdrv_unref() to operate on refcnt: Initially, > refcnt is 1, which means bdrv_unref is effectively a bdrv_delete() here. So > patch 04 has a search and replace to convert bdrv_delete to bdrv_unref, before > bdrv_ref is used anywhere. 05~08 patches calls bdrv_ref for device attach, > block-migration and nbd. > > The rule is: Either bdrv_ref() or bdrv_new() must have a matching > bdrv_unref() call, and the last matching bdrv_unref deletes the bs. > > v6: > 08: Use BH to release reference, this fixes the iotest. > > v5: resend v4 to a right list. > > v4: > 08: Added, let block job use BDS reference. > 02: Fix leak of bs.opaque > > v3: > 03: Removed unnecessary bdrv_close() call. > > v2: > 05: Removed: "block: use BlockDriverState refcnt for device attach/detach" > 07: Fix xen_disk blk_disconnect() as it depended on device attach refcnt. > > > Fam Zheng (8): > vvfat: use bdrv_new() to allocate BlockDriverState > iscsi: use bdrv_new() instead of stack structure > block: implement reference count for BlockDriverState > block: make bdrv_delete() static > migration: omit drive ref as we have bdrv_ref now > xen_disk: simplify blk_disconnect with refcnt > nbd: use BlockDriverState refcnt > block: use BDS ref for block jobs > > block-migration.c | 4 +-- > block.c | 44 ++++++++++++++++++++++++--------- > block/backup.c | 2 +- > block/blkverify.c | 4 +-- > block/cow.c | 2 +- > block/iscsi.c | 16 ++++++------ > block/mirror.c | 2 +- > block/qcow.c | 2 +- > block/qcow2.c | 2 +- > block/qed.c | 2 +- > block/sheepdog.c | 6 ++--- > block/snapshot.c | 2 +- > block/stream.c | 2 +- > block/vmdk.c | 10 ++++---- > block/vvfat.c | 6 ++--- > blockdev-nbd.c | 10 +------- > blockdev.c | 63 +++++++++++++++++------------------------------ > blockjob.c | 1 + > hw/block/xen_disk.c | 13 +++++----- > include/block/block.h | 3 ++- > include/block/block_int.h | 1 + > nbd.c | 5 ++++ > qemu-img.c | 26 +++++++++---------- > qemu-io.c | 6 ++--- > 24 files changed, 119 insertions(+), 115 deletions(-) > > -- > 1.8.3.1 > > Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan