On Fri, Dec 13, 2013 at 03:35:15PM +0800, Fam Zheng wrote:
> @@ -1476,6 +1486,9 @@ void bdrv_close(BlockDriverState *bs)
>  
>      if (bs->drv) {
>          if (bs->backing_hd) {
> +            assert(error_is_set(&bs->backing_blocker));
> +            bdrv_op_unblock_all(bs->backing_hd, bs->backing_blocker);
> +            error_free(bs->backing_blocker);
>              bdrv_unref(bs->backing_hd);
>              bs->backing_hd = NULL;
>          }

This if statement duplicates bdrv_set_backing_hd() code.  I suggest:

if (bs->backing_hd) {
    bdrv_set_backing_hd(bs, NULL);
}

bdrv_set_backing_hd() needs to be modified to call
error_free(bs->backing_blocker) when backing_hd is NULL.

Reply via email to