qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 07/13] blockdev: Means to destroy blockdev only if m


From: Markus Armbruster
Subject: [Qemu-devel] [PATCH 07/13] blockdev: Means to destroy blockdev only if made with drive_init()
Date: Wed, 2 Jun 2010 18:55:23 +0200

All drives are still made that way.  They get destroyed along with
their device.  That's inappropriate for the alternative way to make
blockdevs that will appear later in this series.  These won't have a
DriveInfo.

blockdev_detach() destroys the blockdev only if it has a DriveInfo.

blockdev_attach() does nothing for now.  It'll be fleshed out later.

Signed-off-by: Markus Armbruster <address@hidden>
---
 blockdev.c |   35 +++++++++++++++++++++++++++++++++++
 blockdev.h |    7 +++++++
 2 files changed, 42 insertions(+), 0 deletions(-)

diff --git a/blockdev.c b/blockdev.c
index ace74e4..f90d4fc 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -1,8 +1,12 @@
 /*
  * QEMU host block devices
  *
+ * Copyright (C) 2010 Red Hat Inc.
  * Copyright (c) 2003-2008 Fabrice Bellard
  *
+ * Authors:
+ *  Markus Armbruster <address@hidden>,
+ *
  * This work is licensed under the terms of the GNU GPL, version 2 or
  * later.  See the COPYING file in the top-level directory.
  */
@@ -17,6 +21,37 @@
 
 static QTAILQ_HEAD(drivelist, DriveInfo) drives = 
QTAILQ_HEAD_INITIALIZER(drives);
 
+static int blockdev_del_dinfo(BlockDriverState *bs)
+{
+    DriveInfo *dinfo, *next_dinfo;
+    int res = 0;
+
+    QTAILQ_FOREACH_SAFE(dinfo, &drives, next, next_dinfo) {
+        if (dinfo->bdrv == bs) {
+            qemu_opts_del(dinfo->opts);
+            QTAILQ_REMOVE(&drives, dinfo, next);
+            qemu_free(dinfo);
+            res = 1;
+        }
+    }
+
+    return res;
+}
+
+int blockdev_attach(BlockDriverState *bs, DeviceState *qdev)
+{
+    return 0;
+}
+
+void blockdev_detach(BlockDriverState *bs, DeviceState *qdev)
+{
+    /* Backward compatibility: auto-destroy block device made with
+     * drive_init() when its guest device detaches */
+    if (blockdev_del_dinfo(bs)) {
+        bdrv_delete(bs);
+    }
+}
+
 QemuOpts *drive_add(const char *file, const char *fmt, ...)
 {
     va_list ap;
diff --git a/blockdev.h b/blockdev.h
index 23ea576..8607086 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -1,8 +1,12 @@
 /*
  * QEMU host block devices
  *
+ * Copyright (C) 2010 Red Hat Inc.
  * Copyright (c) 2003-2008 Fabrice Bellard
  *
+ * Authors:
+ *  Markus Armbruster <address@hidden>,
+ *
  * This work is licensed under the terms of the GNU GPL, version 2 or
  * later.  See the COPYING file in the top-level directory.
  */
@@ -13,6 +17,9 @@
 #include "block.h"
 #include "qemu-queue.h"
 
+int blockdev_attach(BlockDriverState *, DeviceState *);
+void blockdev_detach(BlockDriverState *, DeviceState *);
+
 typedef enum {
     IF_NONE,
     IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
-- 
1.6.6.1




reply via email to

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