[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v2 1/3] blockdev: Add function to search for orphaned
From: |
John Snow |
Subject: |
[Qemu-devel] [RFC v2 1/3] blockdev: Add function to search for orphaned drives |
Date: |
Thu, 18 Sep 2014 13:59:04 -0400 |
Signed-off-by: John Snow <address@hidden>
---
blockdev.c | 19 +++++++++++++++++++
include/sysemu/blockdev.h | 1 +
vl.c | 5 +++++
3 files changed, 25 insertions(+)
diff --git a/blockdev.c b/blockdev.c
index b361fbb..5e7c93a 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -166,6 +166,25 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int
unit)
return NULL;
}
+DriveInfo *drive_check_orphaned(void)
+{
+ DriveInfo *dinfo;
+ DriveInfo *ret = NULL;
+
+ QTAILQ_FOREACH(dinfo, &drives, next) {
+ /* If dev is NULL, it has no device attached.
+ * If drv is non-NULL, it has a file attached.
+ * If both conditions are true, it is possibly an oversight. */
+ if ((dinfo->bdrv->dev == NULL) && (dinfo->bdrv->drv != NULL)) {
+ fprintf(stderr, "Orphaned drive: id=%s,if=%s,file=%s\n",
+ dinfo->id, if_name[dinfo->type], dinfo->bdrv->filename);
+ ret = dinfo;
+ }
+ }
+
+ return ret;
+}
+
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index)
{
return drive_get(type,
diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
index 23a5d10..25d52d2 100644
--- a/include/sysemu/blockdev.h
+++ b/include/sysemu/blockdev.h
@@ -46,6 +46,7 @@ struct DriveInfo {
};
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
+DriveInfo *drive_check_orphaned(void);
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
int drive_get_max_bus(BlockInterfaceType type);
DriveInfo *drive_get_next(BlockInterfaceType type);
diff --git a/vl.c b/vl.c
index 5db0d08..e095bcd 100644
--- a/vl.c
+++ b/vl.c
@@ -4457,6 +4457,11 @@ int main(int argc, char **argv, char **envp)
if (qemu_opts_foreach(qemu_find_opts("device"), device_init_func, NULL, 1)
!= 0)
exit(1);
+ /* anybody left over? */
+ if (drive_check_orphaned()) {
+ fprintf(stderr, "Warning: found drives without a backing device.\n");
+ }
+
net_check_clients();
ds = init_displaystate();
--
1.9.3