mirror of https://gitee.com/openkylin/qemu.git
block: Open by reference will try device then node_name.
Since we introduced node_name for named bs of the graph modify the opening by reference to use it as a fallback. This patch also enforce the separation of the device id and graph node namespaces. Signed-off-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
dd67fa5052
commit
0c5e94ee83
10
block.c
10
block.c
|
@ -796,6 +796,13 @@ static int bdrv_assign_node_name(BlockDriverState *bs,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* takes care of avoiding namespaces collisions */
|
||||
if (bdrv_find(node_name)) {
|
||||
error_setg(errp, "node-name=%s is conflicting with a device id",
|
||||
node_name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* takes care of avoiding duplicates node names */
|
||||
if (bdrv_find_node(node_name)) {
|
||||
error_setg(errp, "Duplicate node name");
|
||||
|
@ -977,9 +984,8 @@ int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
|||
}
|
||||
QDECREF(options);
|
||||
|
||||
bs = bdrv_find(reference);
|
||||
bs = bdrv_lookup_bs(reference, reference, errp);
|
||||
if (!bs) {
|
||||
error_setg(errp, "Cannot find block device '%s'", reference);
|
||||
return -ENODEV;
|
||||
}
|
||||
bdrv_ref(bs);
|
||||
|
|
|
@ -452,6 +452,12 @@ static DriveInfo *blockdev_init(const char *file, QDict *bs_opts,
|
|||
}
|
||||
}
|
||||
|
||||
if (bdrv_find_node(qemu_opts_id(opts))) {
|
||||
error_setg(errp, "device id=%s is conflicting with a node-name",
|
||||
qemu_opts_id(opts));
|
||||
goto early_err;
|
||||
}
|
||||
|
||||
/* init */
|
||||
dinfo = g_malloc0(sizeof(*dinfo));
|
||||
dinfo->id = g_strdup(qemu_opts_id(opts));
|
||||
|
|
Loading…
Reference in New Issue