mirror of https://github.com/xemu-project/xemu.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.
|
* dictionary, it needs to use QINCREF() before calling bdrv_file_open.
|
||||||
*/
|
*/
|
||||||
static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
||||||
const char *reference, QDict *options, int flags,
|
QDict *options, int flags, Error **errp)
|
||||||
Error **errp)
|
|
||||||
{
|
{
|
||||||
BlockDriverState *bs = NULL;
|
BlockDriverState *bs = NULL;
|
||||||
BlockDriver *drv;
|
BlockDriver *drv;
|
||||||
|
@ -976,23 +975,6 @@ static int bdrv_file_open(BlockDriverState **pbs, const char *filename,
|
||||||
options = qdict_new();
|
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 = bdrv_new("");
|
||||||
bs->options = options;
|
bs->options = options;
|
||||||
options = qdict_clone_shallow(options);
|
options = qdict_clone_shallow(options);
|
||||||
|
@ -1245,12 +1227,6 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
|
||||||
|
|
||||||
assert(pbs);
|
assert(pbs);
|
||||||
|
|
||||||
if (flags & BDRV_O_PROTOCOL) {
|
|
||||||
assert(!drv);
|
|
||||||
return bdrv_file_open(pbs, filename, reference, options,
|
|
||||||
flags & ~BDRV_O_PROTOCOL, errp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reference) {
|
if (reference) {
|
||||||
bool options_non_empty = options ? qdict_size(options) : false;
|
bool options_non_empty = options ? qdict_size(options) : false;
|
||||||
QDECREF(options);
|
QDECREF(options);
|
||||||
|
@ -1276,6 +1252,12 @@ int bdrv_open(BlockDriverState **pbs, const char *filename,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (flags & BDRV_O_PROTOCOL) {
|
||||||
|
assert(!drv);
|
||||||
|
return bdrv_file_open(pbs, filename, options, flags & ~BDRV_O_PROTOCOL,
|
||||||
|
errp);
|
||||||
|
}
|
||||||
|
|
||||||
if (*pbs) {
|
if (*pbs) {
|
||||||
bs = *pbs;
|
bs = *pbs;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue