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