summaryrefslogtreecommitdiff
path: root/block/block-backend.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2016-06-23 14:20:24 +0200
committerKevin Wolf <kwolf@redhat.com>2016-09-05 19:06:47 +0200
commitb6c1bae5df8abbed73c4c0bd92e9963df8829c74 (patch)
treeec7cb9050fe81750505ffb555f66e205dd2e49d1 /block/block-backend.c
parent9ef6e505f00aaabfccd8f8b0f0685589a74e76ea (diff)
downloadqemu-b6c1bae5df8abbed73c4c0bd92e9963df8829c74.tar.gz
block: Accept node-name for block-stream
In order to remove the necessity to use BlockBackend names in the external API, we want to allow node-names everywhere. This converts block-stream to accept a node-name without lifting the restriction that we're operating at a root node. In case of an invalid device name, the command returns the GenericError error class now instead of DeviceNotFound, because this is what qmp_get_root_bs() returns. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Alberto Garcia <berto@igalia.com>
Diffstat (limited to 'block/block-backend.c')
-rw-r--r--block/block-backend.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/block/block-backend.c b/block/block-backend.c
index effa038924..dc2bc60b9e 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -410,6 +410,22 @@ bool bdrv_has_blk(BlockDriverState *bs)
}
/*
+ * Returns true if @bs has only BlockBackends as parents.
+ */
+bool bdrv_is_root_node(BlockDriverState *bs)
+{
+ BdrvChild *c;
+
+ QLIST_FOREACH(c, &bs->parents, next_parent) {
+ if (c->role != &child_root) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/*
* Return @blk's DriveInfo if any, else null.
*/
DriveInfo *blk_legacy_dinfo(BlockBackend *blk)