On Wed, Feb 10, 2010 at 05:49:15PM +0000, Daniel P. Berrange wrote: > With QEMU >= 0.12 the host and guest side of disks no longer have > the same naming convention. Specifically the host side will now > get a 'drive-' prefix added to its name. The 'info blockstats' > monitor command returns the host side name, so it is neccessary > to strip this off when looking up stats since libvirt stores the > guest side name ! > > * src/qemu/qemu_conf.c, src/qemu/qemu_conf.h: Move 'drive-' prefix > string to a defined constant > * src/qemu/qemu_monitor_json.c, src/qemu/qemu_monitor_text.c: Strip > off 'drive-' prefix (if found) when looking up disk stats > --- > src/qemu/qemu_conf.c | 4 ++-- > src/qemu/qemu_conf.h | 2 ++ > src/qemu/qemu_monitor_json.c | 7 +++++++ > src/qemu/qemu_monitor_text.c | 7 +++++++ > 4 files changed, 18 insertions(+), 2 deletions(-) > > diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c > index 3988582..c1d03cd 100644 > --- a/src/qemu/qemu_conf.c > +++ b/src/qemu/qemu_conf.c > @@ -2301,7 +2301,7 @@ qemuBuildDriveStr(virDomainDiskDefPtr disk, > virBufferAddLit(&opt, ",media=cdrom"); > > if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { > - virBufferVSprintf(&opt, ",id=drive-%s", disk->info.alias); > + virBufferVSprintf(&opt, ",id=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); > } else { > if (busid == -1 && unitid == -1) { > if (idx != -1) > @@ -2390,7 +2390,7 @@ qemuBuildDriveDevStr(virDomainDiskDefPtr disk) > _("unsupported disk bus '%s' with device setup"), bus); > goto error; > } > - virBufferVSprintf(&opt, ",drive=drive-%s", disk->info.alias); > + virBufferVSprintf(&opt, ",drive=%s%s", QEMU_DRIVE_HOST_PREFIX, disk->info.alias); > virBufferVSprintf(&opt, ",id=%s", disk->info.alias); > > if (virBufferError(&opt)) { > diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h > index d26bb90..498f1d1 100644 > --- a/src/qemu/qemu_conf.h > +++ b/src/qemu/qemu_conf.h > @@ -157,6 +157,8 @@ typedef qemuDomainPCIAddressSet *qemuDomainPCIAddressSetPtr; > /* Config type for XML import/export conversions */ > #define QEMU_CONFIG_FORMAT_ARGV "qemu-argv" > > +#define QEMU_DRIVE_HOST_PREFIX "drive-" > + > #define qemuReportError(code, fmt...) \ > virReportErrorHelper(NULL, VIR_FROM_QEMU, code, __FILE__, \ > __FUNCTION__, __LINE__, fmt) > diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c > index e5288ce..032afef 100644 > --- a/src/qemu/qemu_monitor_json.c > +++ b/src/qemu/qemu_monitor_json.c > @@ -754,6 +754,13 @@ int qemuMonitorJSONGetBlockStatsInfo(qemuMonitorPtr mon, > goto cleanup; > } > > + /* New QEMU has separate names for host & guest side of the disk > + * and libvirt gives the host side a 'drive-' prefix. The passed > + * in devname is the guest side though > + */ > + if (STRPREFIX(thisdev, QEMU_DRIVE_HOST_PREFIX)) > + thisdev += strlen(QEMU_DRIVE_HOST_PREFIX); > + > if (STRNEQ(thisdev, devname)) > continue; > > diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c > index 23fc4cf..a6a4598 100644 > --- a/src/qemu/qemu_monitor_text.c > +++ b/src/qemu/qemu_monitor_text.c > @@ -649,6 +649,13 @@ int qemuMonitorTextGetBlockStatsInfo(qemuMonitorPtr mon, > p = info; > > while (*p) { > + /* New QEMU has separate names for host & guest side of the disk > + * and libvirt gives the host side a 'drive-' prefix. The passed > + * in devname is the guest side though > + */ > + if (STRPREFIX(p, QEMU_DRIVE_HOST_PREFIX)) > + p += strlen(QEMU_DRIVE_HOST_PREFIX); > + > if (STREQLEN (p, devname, devnamelen) > && p[devnamelen] == ':' && p[devnamelen+1] == ' ') { > ACK, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list