Take into account the fact that a block filter like quorum will be in bs->file while a regular block driver device is really on the top level.
Signed-off-by: Benoit Canet <ben...@irqsave.net> --- block.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 07ac50a..6ace45c 100644 --- a/block.c +++ b/block.c @@ -5402,12 +5402,14 @@ bool bdrv_is_first_non_filter(BlockDriverState *candidate) QTAILQ_FOREACH(bs, &bdrv_states, device_list) { bool perm; - if (!bs->file) { - continue; + if (bs->file && + bs->file->drv && + bs->file->drv->authorizations[BS_IS_A_FILTER]) { + perm = bdrv_recurse_is_first_non_filter(bs->file, candidate); + } else { + perm = bdrv_recurse_is_first_non_filter(bs, candidate); } - perm = bdrv_recurse_is_first_non_filter(bs->file, candidate); - /* candidate is the first non filter */ if (perm) { return true; -- 1.8.3.2