From: "Daniel P. Berrange" <berrange@redhat.com>
To: Michael Roth <mdroth@linux.vnet.ibm.com>
Cc: qemu-devel@nongnu.org,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Eric Blake <eblake@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] monitor: fix object_del for command-line-created objects
Date: Thu, 1 Dec 2016 09:24:07 +0000 [thread overview]
Message-ID: <20161201092407.GB9191@redhat.com> (raw)
In-Reply-To: <1480547176-19349-1-git-send-email-mdroth@linux.vnet.ibm.com>
On Wed, Nov 30, 2016 at 05:06:16PM -0600, Michael Roth wrote:
> Currently objects specified on the command-line are only partially
> cleaned up when 'object_del' is issued in either HMP or QMP: the
> object itself is fully finalized, but the QemuOpts are not removed.
> This results in the following behavior:
>
> x86_64-softmmu/qemu-system-x86_64 -monitor stdio \
> -object memory-backend-ram,id=ram1,size=256M
>
> QEMU 2.7.91 monitor - type 'help' for more information
> (qemu) object_del ram1
> (qemu) object_del ram1
> object 'ram1' not found
> (qemu) object_add memory-backend-ram,id=ram1,size=256M
> Duplicate ID 'ram1' for object
> Try "help object_add" for more information
>
> which can be an issue for use-cases like memory hotplug.
>
> This happens on the HMP side because hmp_object_add() attempts to
> create a temporary QemuOpts entry with ID 'ram1', which ends up
> conflicting with the command-line-created entry, since it was never
> cleaned up during the previous hmp_object_del() call.
>
> We address this by adding checks in {qmp,hmp}_object_del to determine
> whether an option group entry matching the object's ID is present,
> and removing it if it is.
>
> Note that qmp_object_add() never attempts to create a temporary
> QemuOpts entry, so it does not encounter the duplicate ID error,
> which is why this isn't generally visible in libvirt.
>
> Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> Cc: Markus Armbruster <armbru@redhat.com>
> Cc: Eric Blake <eblake@redhat.com>
> Cc: Daniel Berrange <berrange@redhat.com>
> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> ---
> hmp.c | 10 ++++++++++
> qmp.c | 10 ++++++++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/hmp.c b/hmp.c
> index b869617..99b8bf3 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -2072,6 +2072,16 @@ void hmp_object_del(Monitor *mon, const QDict *qdict)
>
> user_creatable_del(id, &err);
> hmp_handle_error(mon, &err);
> +
> + /* if object was defined on the command-line, remove its corresponding
> + * option group entry
> + */
> + if (err == NULL) {
> + QemuOptsList *opt_group = qemu_find_opts_err("object", &err);
> + if (opt_group) {
> + qemu_opts_del(qemu_opts_find(opt_group, id));
> + }
> + }
> }
>
> void hmp_info_memdev(Monitor *mon, const QDict *qdict)
> diff --git a/qmp.c b/qmp.c
> index 0028f0b..87c545d 100644
> --- a/qmp.c
> +++ b/qmp.c
> @@ -686,6 +686,16 @@ void qmp_object_add(const char *type, const char *id,
> void qmp_object_del(const char *id, Error **errp)
> {
> user_creatable_del(id, errp);
> +
> + /* if object was defined on the command-line, remove its corresponding
> + * option group entry
> + */
> + if (!(errp && *errp)) {
> + QemuOptsList *opt_group = qemu_find_opts_err("object", errp);
> + if (opt_group) {
> + qemu_opts_del(qemu_opts_find(opt_group, id));
> + }
> + }
> }
I rather feel like this code ought to be in user_creatable_del(), since
all code paths which call user_creatable_del() need to do deal with
this scenario.
Also I'd like to see a unit test added that exposes this problem and
demonstrates the fix - could att it to tests/check-qom-proplist.c
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://entangle-photo.org -o- http://search.cpan.org/~danberr/ :|
next prev parent reply other threads:[~2016-12-01 9:24 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-30 23:06 [Qemu-devel] [PATCH] monitor: fix object_del for command-line-created objects Michael Roth
2016-12-01 2:33 ` [Qemu-devel] [PATCH for-2.8] " Eric Blake
2016-12-01 16:09 ` Michael Roth
2016-12-01 9:24 ` Daniel P. Berrange [this message]
2016-12-01 12:34 ` [Qemu-devel] [PATCH] " Dr. David Alan Gilbert
2016-12-01 16:13 ` Michael Roth
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161201092407.GB9191@redhat.com \
--to=berrange@redhat.com \
--cc=armbru@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.