close tapfd before running down_script [was Re: [Qemu-devel]
ANNOUNCE: Release 0.11.0-rc2 of QEMU]
Mark McLoughlin
markmc at redhat.com
Sun Sep 6 12:51:28 UTC 2009
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 at 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
The current behaviour seems right to me. Could you explain your use case
a bit more? Maybe post the up and down scripts?
Cheers,
Mark.
More information about the freebsd-emulation
mailing list