[libvirt] [PATCH] conf: Remove the actual hostdev when removing a network
Peter Krempa
pkrempa at redhat.com
Wed Sep 4 15:26:42 UTC 2013
On 09/04/13 17:17, Cole Robinson wrote:
> On 09/03/2013 11:29 AM, Peter Krempa wrote:
>> Commit 50348e6edfa reused the code to remove the hostdev portion of a
>> network definition on multiple places but forgot to take into account
>> that sometimes the "actual" network is passed and in some cases the
>> parent of that.
>>
>> This patch uses the virDomainNetGetActualHostdev() helper to acquire the
>> correct pointer all the time while removing the hostdev portion from the
>> list.
>> ---
>> src/conf/domain_conf.c | 14 +++++++-------
>> 1 file changed, 7 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index e412f28..cef4cf9 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -10002,14 +10002,14 @@ void
>> virDomainNetRemoveHostdev(virDomainDefPtr def,
>> virDomainNetDefPtr net)
>> {
>> - if (net->type == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
>> - /* hostdev net devices are normally also be in the hostdevs
>> - * array, but might have already been removed by the time we
>> - * get here.
>> - */
>> - virDomainHostdevDefPtr hostdev = &net->data.hostdev.def;
>> - size_t i;
>> + /* hostdev net devices are normally also be in the hostdevs
>> + * array, but might have already been removed by the time we
>> + * get here.
>> + */
>> + virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net);
>> + size_t i;
>>
>> + if (hostdev) {
>> for (i = 0; i < def->nhostdevs; i++) {
>> if (def->hostdevs[i] == hostdev) {
>> virDomainHostdevRemove(def, i);
>>
>
> This causes a crash for me on failed guest startup. XML attached, guest is
> legitimately failing because libvirt doesn't know about the CPU model it
> specifies. Reverting this patch fixes the crash. Snipped backtrace:
>
> #0 virDomainNetGetActualHostdev (iface=iface at entry=0x7fffd41d7930)
> at conf/domain_conf.c:17879
> #1 0x00007ffff7562f10 in virDomainNetRemoveHostdev (
> def=def at entry=0x7fffd41c7400, net=net at entry=0x7fffd41d7930)
> at conf/domain_conf.c:10009
> #2 0x00007fffddda5d65 in qemuProcessStop (driver=driver at entry=0x7fffd409f0c0,
> vm=vm at entry=0x7fffd41c7ea0, reason=reason at entry=VIR_DOMAIN_SHUTOFF_FAILED,
> flags=flags at entry=2) at qemu/qemu_process.c:4270
> #3 0x00007fffddda7e01 in qemuProcessStart (conn=conn at entry=0x7fffd0000a80,
> driver=driver at entry=0x7fffd409f0c0, vm=vm at entry=0x7fffd41c7ea0,
> migrateFrom=migrateFrom at entry=0x0, stdin_fd=stdin_fd at entry=-1,
> stdin_path=stdin_path at entry=0x0, snapshot=snapshot at entry=0x0,
> vmop=vmop at entry=VIR_NETDEV_VPORT_PROFILE_OP_CREATE, flags=<optimized out>,
> flags at entry=1) at qemu/qemu_process.c:4051
>
> - Cole
>
d'oh, virDomainNetGetActualHostdev isn't bulletproof in case the actual
network interface isn't allocated. I'll post a patch asap.
Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 901 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130904/18e0ced7/attachment-0001.sig>
More information about the libvir-list
mailing list