Date: Sun, 6 Sep 2009 17:43:15 +0200 From: Juergen Lock <nox@jelal.kn-bremen.de> To: Mark McLoughlin <markmc@redhat.com> Cc: freebsd-emulation@freebsd.org, Juergen Lock <nox@jelal.kn-bremen.de>, Anthony Liguori <anthony@codemonkey.ws>, qemu-devel@nongnu.org Subject: Re: close tapfd before running down_script [was Re: [Qemu-devel] ANNOUNCE: Release 0.11.0-rc2 of QEMU] Message-ID: <20090906154315.GA88187@triton8.kn-bremen.de> In-Reply-To: <1252241425.3191.81.camel@blaa> References: <4AA11B9F.9050101@codemonkey.ws> <20090904201347.GA77929@triton8.kn-bremen.de> <1252241425.3191.81.camel@blaa>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Sep 06, 2009 at 01:50:25PM +0100, Mark McLoughlin wrote: > On Fri, 2009-09-04 at 22:13 +0200, Juergen Lock wrote: > > > The second change is a small patch to tap_cleanup that makes it close > > the tap fd before calling the ifdown script instead of after, otherwise > > FreeBSD's tap driver may hit a KASSERT in case the ifdown script does > > something like an `ifconfig tap0 destroy'... > > > > Index: qemu/net.c > > @@ -1643,12 +1643,13 @@ static void tap_cleanup(VLANClientState > > > > qemu_purge_queued_packets(vc); > > > > - if (s->down_script[0]) > > - launch_script(s->down_script, s->down_script_arg, s->fd); > > - > > tap_read_poll(s, 0); > > tap_write_poll(s, 0); > > close(s->fd); > > + > > + if (s->down_script[0]) > > + launch_script(s->down_script, s->down_script_arg, -1); > > + > > qemu_free(s); > > } > > > > I don't know if there are use cases where the ifdown script needs the > > tap fd still open, otherwise I guess this can also be committed upstream. > > And in case you want to: :) > > > > Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de> > > I don't ever use the the down script myself, but a couple of things to > bear in mind: > > a) 0.9.1 never actually closed the tap fd and since 0.10.0 we've > been closing the fd after calling the script > > b) where qemu creates the tap interface, by closing the tap fd before > the script we'd be destroying the interface before passing the > interface name to the script > Ah, then that sounds like a difference between Linux and FreeBSD, on FreeBSD the tap interface continues to exist after closing the fd... (which is why these scripts call `ifconfig tapX destroy' in the first place.) > The current behaviour seems right to me. Could you explain your use case > a bit more? Maybe post the up and down scripts? Here's the thread that started this: http://lists.freebsd.org/pipermail/freebsd-emulation/2009-August/006700.html And here is FreeBSD's tap_destroy() fn with the mentioned KASSERT: http://fxr.watson.org/fxr/source/net/if_tap.c#L213 Anyway, sounds like the patch is the wrong thing to do on Linux hosts so I guess I'll just keep it private to the FreeBSD port(s)... (Or should I repost it with an #ifdef __FreeBSD__ etc?) Thanx, Juergen
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090906154315.GA88187>