qemu-devel
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]