From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57754) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4rzb-0005Sb-Ch for qemu-devel@nongnu.org; Thu, 01 Aug 2013 08:28:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V4rzV-0003w0-5N for qemu-devel@nongnu.org; Thu, 01 Aug 2013 08:28:31 -0400 Received: from mx1.redhat.com ([209.132.183.28]:53969) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V4rzU-0003vT-RR for qemu-devel@nongnu.org; Thu, 01 Aug 2013 08:28:25 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r71CSNjb018571 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 1 Aug 2013 08:28:23 -0400 Date: Thu, 1 Aug 2013 14:28:22 +0200 From: Stefan Hajnoczi Message-ID: <20130801122821.GC2387@stefanha-thinkpad.redhat.com> References: <1375265640-27307-1-git-send-email-famz@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1375265640-27307-1-git-send-email-famz@redhat.com> Subject: Re: [Qemu-devel] [PATCH v3 0/7] 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 On Wed, Jul 31, 2013 at 06:13:53PM +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. > > 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 (7): > 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 Follow-up question: Did you look at using bdrv_ref() for the BDS <- BlockJob relationship too? blockdev.c block job code still uses the DriveInfo refcount after your series. The BDS reference would be sufficient since the DriveInfo fields are not used by block jobs. Stefan