[libvirt] [PATCH] Bug Fix: Do not release network actual device in qemuBuildCommandLine on error

Stefan Berger stefanb at linux.vnet.ibm.com
Mon Nov 21 12:16:05 UTC 2011


On 11/16/2011 09:34 PM, Roopa Prabhu wrote:
> From: Roopa Prabhu<roprabhu at cisco.com>
>
> For direct attach devices, in qemuBuildCommandLine, we seem to be freeing
> actual device on error path (with networkReleaseActualDevice). But the actual
> device is not deleted.
>
> qemuProcessStop eventually deletes the direct attach device and releases actual device. But by the time qemuProcessStop is called qemuBuildCommandLine
> has already freed actual device. Leaving stray macvtap devices behind on error.
> So the simplest fix is to remove the networkReleaseActualDevice in
> qemuBuildCommandLine. This patch does just that.
>
> Does this look right ?. I have only verified this with direct and bridge mode.
You're right and to me your patch looks ok too. When using the interface 
type=network and then network in 'macvtap direction connection' mode [1] 
and an error happens in qemuBuildCommandLine I also see a stray macvtap 
device left behind. We're calling networkReleaseActualDevice two times 
and that seems to not work in this configuration. In the case when 
macvtap is used via interface type='direct' it works fine with or 
without your patch.

[1] file:///root/tmp/libvirt-acl/docs/formatnetwork.html#examplesDirect


    Stefan
> The other option is to do both delMacvtap and networkReleaseActualDevice in
> qemuBuildCommandLine instead of doing only networkReleaseActualDevice.
> I do have a patch for this too.
>
> Signed-off-by: Roopa Prabhu<roprabhu at cisco.com>
> ---
>   src/qemu/qemu_command.c |    2 --
>   1 files changed, 0 insertions(+), 2 deletions(-)
>
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index bb12016..ba33a4a 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -5378,8 +5378,6 @@ qemuBuildCommandLine(virConnectPtr conn,
>       virReportOOMError();
>    error:
>       /* free up any resources in the network driver */
> -    for (i = 0 ; i<  def->nnets ; i++)
> -        networkReleaseActualDevice(def->nets[i]);
>       for (i = 0; i<= last_good_net; i++)
>           virDomainConfNWFilterTeardown(def->nets[i]);
>       virCommandFree(cmd);
>




More information about the libvir-list mailing list