From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark McLoughlin Subject: kvm: qemu: net: drop packet from tap device if all NICs are down Date: Wed, 22 Apr 2009 15:56:34 +0100 Message-ID: <1240412194.7661.22.camel@blaa> Reply-To: Mark McLoughlin Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: kvm , Yan Vugenfirer To: Avi Kivity Return-path: Received: from mx2.redhat.com ([66.187.237.31]:49683 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752135AbZDVO4u (ORCPT ); Wed, 22 Apr 2009 10:56:50 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3MEunLd030290 for ; Wed, 22 Apr 2009 10:56:49 -0400 Sender: kvm-owner@vger.kernel.org List-ID: If you do e.g. "set_link virtio.0 down" and there are packets pending on the tap interface, we currently buffer a packet and constantly try and send it until the link is up again. We actually just want to drop the packet if the NIC is down. Upstream qemu already does this, we just differ because we buffer packets from the tap interface. Reported-by: Yan Vugenfirer Signed-off-by: Mark McLoughlin --- qemu/net.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/qemu/net.c b/qemu/net.c index 9c199d6..201d282 100644 --- a/qemu/net.c +++ b/qemu/net.c @@ -412,8 +412,10 @@ int qemu_send_packet(VLANClientState *vc1, const uint8_t *buf, int size) hex_dump(stdout, buf, size); #endif for(vc = vlan->first_client; vc != NULL; vc = vc->next) { - if (vc != vc1 && !vc->link_down) { - if (!vc->fd_can_read || vc->fd_can_read(vc->opaque)) { + if (vc != vc1) { + if (vc->link_down) + ret = 0; + else if (!vc->fd_can_read || vc->fd_can_read(vc->opaque)) { vc->fd_read(vc->opaque, buf, size); ret = 0; } -- 1.6.0.6