[Top][All Lists]
[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
- [Qemu-devel] [PATCH 00/13] New -blockdev to define a host block device, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 03/13] monitor: Make "commit FOO" complain when FOO doesn't exist, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 12/13] blockdev: Factor option value parsers out of drive_init(), Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 01/13] block: Move error actions from DriveInfo to BlockDriverState, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 04/13] block: New bdrv_next(), Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 05/13] block: Decouple savevm from DriveInfo, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 11/13] qemu-option: New qemu_opt_next(), qemu_opt_name(), Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 07/13] blockdev: Means to destroy blockdev only if made with drive_init(),
Markus Armbruster <=
- [Qemu-devel] [PATCH 02/13] block: Decouple block device "commit all" from DriveInfo, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 09/13] blockdev: drive_get_by_id() is no longer used, remove, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 06/13] blockdev: Give drives internal linkage, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 10/13] qemu-option: New qemu_opts_reset(), Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 08/13] qdev: Decouple qdev_prop_drive from DriveInfo, Markus Armbruster, 2010/06/02
- [Qemu-devel] [PATCH 13/13] blockdev: New -blockdev to define a host block device, Markus Armbruster, 2010/06/02