[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