From fcf1b59128850dc1a0075da7e1395a111c60a3d0 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Mon, 10 Sep 2007 11:47:17 +0000 Subject: [PATCH] * src/xend_internal.c: applied patch from Hugh Brock to allow CD Rom device reload by reusing virDomainAttachDevice() with a new definition Daniel --- ChangeLog | 6 ++++++ src/xend_internal.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51153341be..3aa8676ece 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Mon Sep 10 13:46:05 CEST 2007 Daniel Veillard + + * src/xend_internal.c: applied patch from Hugh Brock to allow + CD Rom device reload by reusing virDomainAttachDevice() with + a new definition + Mon Sep 10 11:35:06 CEST 2007 Daniel Veillard * include/libvirt/libvirt.h include/libvirt/libvirt.h.in diff --git a/src/xend_internal.c b/src/xend_internal.c index 0bd42a700f..64557fcb75 100644 --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -3087,6 +3087,7 @@ xenDaemonAttachDevice(virDomainPtr domain, char *xml) char *sexpr, *conf, *str; int hvm = 0, ret; xenUnifiedPrivatePtr priv; + char class[8], ref[80]; if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { virXendError((domain ? domain->conn : NULL), VIR_ERR_INVALID_ARG, @@ -3116,8 +3117,16 @@ xenDaemonAttachDevice(virDomainPtr domain, char *xml) *(conf + strlen(conf) -1) = 0; /* suppress final ) */ } else conf = sexpr; - ret = xend_op(domain->conn, domain->name, "op", "device_create", - "config", conf, NULL); + if (virDomainXMLDevID(domain, xml, class, ref)) { + /* device doesn't exist, define it */ + ret = xend_op(domain->conn, domain->name, "op", "device_create", + "config", conf, NULL); + } + else { + /* device exists, attempt to modify it */ + ret = xend_op(domain->conn, domain->name, "op", "device_configure", + "config", conf, "dev", ref, NULL); + } free(sexpr); return ret; }