There should be a section of code in device hot unplug, checking
DriverInfo's ref, fail or do nothing when ref != 1. But I haven't found
that code, so not sure whether this patch will change the behavior in
device hot unplug.

> block-migration.c does not actually use DriveInfo anywhere.  Hence it's
> safe to drive ref code, we really only care about referencing BDS.
> 
> Signed-off-by: Fam Zheng <f...@redhat.com>
> ---
>   block-migration.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/block-migration.c b/block-migration.c
> index f803f20..daf9ec1 100644
> --- a/block-migration.c
> +++ b/block-migration.c
> @@ -336,8 +336,8 @@ static void init_blk_migration_it(void *opaque, 
> BlockDriverState *bs)
>           bmds->completed_sectors = 0;
>           bmds->shared_base = block_mig_state.shared_base;
>           alloc_aio_bitmap(bmds);
> -        drive_get_ref(drive_get_by_blockdev(bs));
>           bdrv_set_in_use(bs, 1);
> +        bdrv_ref(bs);
> 
>           block_mig_state.total_sector_sum += sectors;
> 
> @@ -575,7 +575,7 @@ static void blk_mig_cleanup(void)
>       while ((bmds = QSIMPLEQ_FIRST(&block_mig_state.bmds_list)) != NULL) {
>           QSIMPLEQ_REMOVE_HEAD(&block_mig_state.bmds_list, entry);
>           bdrv_set_in_use(bmds->bs, 0);
> -        drive_put_ref(drive_get_by_blockdev(bmds->bs));
> +        bdrv_unref(bmds->bs);
>           g_free(bmds->aio_bitmap);
>           g_free(bmds);
>       }
> 


-- 
Best Regards

Wenchao Xia


Reply via email to