
Guido Günther wrote:
Hi, use qemudDiskDeviceName to determine the block device name (as suggested by Cole). -- Guido
From 6985fee585561b04942036d283632e7cb2bb708f Mon Sep 17 00:00:00 2001 From: Guido Guenther <agx@sigxcpu.org> Date: Thu, 2 Oct 2008 21:12:20 +0200 Subject: [PATCH] support virtio and scsi disks in qemudDomainBlockStats
--- src/qemu_driver.c | 56 ++++++++++++++++++++++++---------------------------- 1 files changed, 26 insertions(+), 30 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c index b2ea0d1..5ffaf21 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -3397,11 +3397,13 @@ qemudDomainBlockStats (virDomainPtr dom, { const struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData; - char *dummy, *info; + char *dummy, *info = NULL; const char *p, *eol; - char qemu_dev_name[32]; + const char *qemu_dev_name = NULL; size_t len; + int ret = -1; const virDomainObjPtr vm = virDomainFindByID(driver->domains, dom->id); + virDomainDiskDefPtr disk;
if (!vm) { qemudReportError (dom->conn, dom, NULL, VIR_ERR_INVALID_DOMAIN, @@ -3414,34 +3416,31 @@ qemudDomainBlockStats (virDomainPtr dom, return -1; }
- /* - * QEMU internal block device names are different from the device - * names we use in libvirt, so we need to map between them: - * - * hd[a-] to ide0-hd[0-] - * cdrom to ide1-cd0 - * fd[a-] to floppy[0-] - */ - if (STRPREFIX (path, "hd") && c_islower(path[2])) - snprintf (qemu_dev_name, sizeof (qemu_dev_name), - "ide0-hd%d", path[2] - 'a'); - else if (STREQ (path, "cdrom")) - strcpy (qemu_dev_name, "ide1-cd0"); - else if (STRPREFIX (path, "fd") && c_islower(path[2])) - snprintf (qemu_dev_name, sizeof (qemu_dev_name), - "floppy%d", path[2] - 'a'); - else { + disk = vm->def->disks; + while (disk) { + if (STREQ(disk->dst, path)) + break; + disk = disk->next; + } + + if (!disk) { qemudReportError (dom->conn, dom, NULL, VIR_ERR_INVALID_ARG, _("invalid path: %s"), path); return -1; }
+ qemu_dev_name = qemudDiskDeviceName(dom, disk); + if (!qemu_dev_name) { + qemudReportError (dom->conn, dom, NULL, VIR_ERR_INVALID_ARG, + _("unknown path %s"), path); + return -1; + }
You should probably just return -1 here, since qemudDiskDeviceName sets its own error message. The rest looks fine to me. Thanks, Cole