blockdev: Make orphaned -drive fatal
Block backends defined with "-drive if=T" with T other than "none" are
meant to be picked up by machine initialization code: a suitable
frontend gets created and wired up automatically.
If machine initialization code doesn't comply, the block backend
remains unused. This triggers a warning since commit a66c9dc
, v2.2.0.
Drives created by default are exempted; use -nodefaults to get rid of
them.
Turn this warning into an error.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <1487153147-11530-8-git-send-email-armbru@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
This commit is contained in:
parent
664cc623bf
commit
720b8dc052
14
blockdev.c
14
blockdev.c
|
@ -227,30 +227,30 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool drive_check_orphaned(void)
|
void drive_check_orphaned(void)
|
||||||
{
|
{
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
Location loc;
|
Location loc;
|
||||||
bool rs = false;
|
bool orphans = false;
|
||||||
|
|
||||||
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
||||||
dinfo = blk_legacy_dinfo(blk);
|
dinfo = blk_legacy_dinfo(blk);
|
||||||
/* If dinfo->bdrv->dev is NULL, it has no device attached. */
|
|
||||||
/* Unless this is a default drive, this may be an oversight. */
|
|
||||||
if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
|
if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
|
||||||
dinfo->type != IF_NONE) {
|
dinfo->type != IF_NONE) {
|
||||||
loc_push_none(&loc);
|
loc_push_none(&loc);
|
||||||
qemu_opts_loc_restore(dinfo->opts);
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
error_report("warning: machine type does not support"
|
error_report("machine type does not support"
|
||||||
" if=%s,bus=%d,unit=%d",
|
" if=%s,bus=%d,unit=%d",
|
||||||
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
||||||
loc_pop(&loc);
|
loc_pop(&loc);
|
||||||
rs = true;
|
orphans = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rs;
|
if (orphans) {
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
|
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
|
||||||
|
|
|
@ -48,7 +48,7 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo);
|
||||||
void override_max_devs(BlockInterfaceType type, int max_devs);
|
void override_max_devs(BlockInterfaceType type, int max_devs);
|
||||||
|
|
||||||
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
||||||
bool drive_check_orphaned(void);
|
void drive_check_orphaned(void);
|
||||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
||||||
int drive_get_max_bus(BlockInterfaceType type);
|
int drive_get_max_bus(BlockInterfaceType type);
|
||||||
int drive_get_max_devs(BlockInterfaceType type);
|
int drive_get_max_devs(BlockInterfaceType type);
|
||||||
|
|
Loading…
Reference in New Issue