If bdrv_is_inserted() is called on the top level BDS, it should make sure all nodes in the BDS tree are actually inserted.
Signed-off-by: Max Reitz <mre...@redhat.com> Reviewed-by: Eric Blake <ebl...@redhat.com> Reviewed-by: Alberto Garcia <be...@igalia.com> --- block.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 494e08e..1d27b6a 100644 --- a/block.c +++ b/block.c @@ -3235,10 +3235,9 @@ bool bdrv_is_inserted(BlockDriverState *bs) if (!drv) { return false; } - if (!drv->bdrv_is_inserted) { - return true; - } - return drv->bdrv_is_inserted(bs); + return (!drv->bdrv_is_inserted || drv->bdrv_is_inserted(bs)) && + (!bs->file || bdrv_is_inserted(bs->file)) && + (!bs->backing_hd || bdrv_is_inserted(bs->backing_hd)); } /** -- 2.4.6