mirror of https://gitee.com/openkylin/qemu.git
block: Reuse reference handling from bdrv_open()
Remove the reference parameter and the related handling code from bdrv_file_open(), since it exists in bdrv_open() now as well. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Benoit Canet <benoit@irqsave.net> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
2e40134bfd
commit
5d12aa63c7
32
block.c
32
block.c
|
@ -961,8 +961,7 @@ free_and_fail:
|
|||
* dictionary, it needs to use QINCREF() before calling bdrv_file_open.
|
||||
*/
|
||||
static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
||||
const char *reference, QDict *options, int flags,
|
||||
Error **errp)
|
||||
QDict *options, int flags, Error **errp)
|
||||
{
|
||||
BlockDriverState *bs = NULL;
|
||||
BlockDriver *drv;
|
||||
|
@ -976,23 +975,6 @@ static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
|||
options = qdict_new();
|
||||
}
|
||||
|
||||
if (reference) {
|
||||
if (filename || qdict_size(options)) {
|
||||
error_setg(errp, "Cannot reference an existing block device with "
|
||||
"additional options or a new filename");
|
||||
return -EINVAL;
|
||||
}
|
||||
QDECREF(options);
|
||||
|
||||
bs = bdrv_lookup_bs(reference, reference, errp);
|
||||
if (!bs) {
|
||||
return -ENODEV;
|
||||
}
|
||||
bdrv_ref(bs);
|
||||
*pbs = bs;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bs = bdrv_new("");
|
||||
bs->options = options;
|
||||
options = qdict_clone_shallow(options);
|
||||
|
@ -1245,12 +1227,6 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
|
|||
|
||||
assert(pbs);
|
||||
|
||||
if (flags & BDRV_O_PROTOCOL) {
|
||||
assert(!drv);
|
||||
return bdrv_file_open(pbs, filename, reference, options,
|
||||
flags & ~BDRV_O_PROTOCOL, errp);
|
||||
}
|
||||
|
||||
if (reference) {
|
||||
bool options_non_empty = options ? qdict_size(options) : false;
|
||||
QDECREF(options);
|
||||
|
@ -1276,6 +1252,12 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (flags & BDRV_O_PROTOCOL) {
|
||||
assert(!drv);
|
||||
return bdrv_file_open(pbs, filename, options, flags & ~BDRV_O_PROTOCOL,
|
||||
errp);
|
||||
}
|
||||
|
||||
if (*pbs) {
|
||||
bs = *pbs;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue