Patchwork [1/3] v2 Add drive_get_by_id

login
register
mail settings
Submitter Ryan Harper
Date Oct. 25, 2010, 6:22 p.m.
Message ID <1288030956-28383-2-git-send-email-ryanh@us.ibm.com>
Download mbox | patch
Permalink /patch/69127/
State New
Headers show

Comments

Ryan Harper - Oct. 25, 2010, 6:22 p.m.
Add a function to find a drive by id string.

Changes since v1:
-Coding Style fix

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
---
 blockdev.c |   13 +++++++++++++
 blockdev.h |    1 +
 2 files changed, 14 insertions(+), 0 deletions(-)
Markus Armbruster - Oct. 29, 2010, 1:18 p.m.
Ryan Harper <ryanh@us.ibm.com> writes:

> Add a function to find a drive by id string.
>
> Changes since v1:
> -Coding Style fix

Recommend to put patch history below the --- line, so it doesn't get
included in the commit message.

> Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
> ---
>  blockdev.c |   13 +++++++++++++
>  blockdev.h |    1 +
>  2 files changed, 14 insertions(+), 0 deletions(-)
[...]

This effectively reverts commit dfb0acd8, which cleans up after commit
f8b6cc00:

    qdev: Decouple qdev_prop_drive from DriveInfo
    
    Make the property point to BlockDriverState, cutting out the DriveInfo
    middleman.  This prepares the ground for block devices that don't have
    a DriveInfo.

    Currently all user-defined ones have a DriveInfo, because the only way
    to define one is -drive & friends (they go through drive_init()).
    DriveInfo is closely tied to -drive, and like -drive, it mixes
    information about host and guest part of the block device.  I'm
    working towards a new way to define block devices, with clean
    host/guest separation, and I need to get DriveInfo out of the way for
    that.

    Fortunately, the device models are perfectly happy with
    BlockDriverState, except for two places: ide_drive_initfn() and
    scsi_disk_initfn() need to check the DriveInfo for a serial number set
    with legacy -drive serial=...  Use drive_get_by_blockdev() there.
    
    Device model code should now use DriveInfo only when explicitly
    dealing with drives defined the old way, i.e. without -device.

I think your do_drive_unplug() could use bdrv_find() instead.  More on
that in my review of your PATCH 2/3.

Patch

diff --git a/blockdev.c b/blockdev.c
index ff7602b..5fc3b9b 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -75,6 +75,19 @@  DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
     return NULL;
 }
 
+DriveInfo *drive_get_by_id(const char *id)
+{
+    DriveInfo *dinfo;
+
+    QTAILQ_FOREACH(dinfo, &drives, next) {
+        if (strcmp(id, dinfo->id)) {
+            continue;
+        }
+        return dinfo;
+    }
+    return NULL;
+}
+
 int drive_get_max_bus(BlockInterfaceType type)
 {
     int max_bus;
diff --git a/blockdev.h b/blockdev.h
index 653affc..19c6915 100644
--- a/blockdev.h
+++ b/blockdev.h
@@ -38,6 +38,7 @@  DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
 int drive_get_max_bus(BlockInterfaceType type);
 void drive_uninit(DriveInfo *dinfo);
 DriveInfo *drive_get_by_blockdev(BlockDriverState *bs);
+DriveInfo *drive_get_by_id(const char *id);
 
 QemuOpts *drive_add(const char *file, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
 DriveInfo *drive_init(QemuOpts *arg, int default_to_scsi, int *fatal_error);