From: Jason Wang <jasowang@redhat.com>
To: zhanghailiang <zhang.zhanghailiang@huawei.com>, qemu-devel@nongnu.org
Cc: peter.huangpeng@huawei.com, luonengjun@huawei.com,
aliguori@amazon.com, stefanha@redhat.com, mst@redhat.com
Subject: Re: [Qemu-devel] [PATCH V4] net: Forbid dealing with packets when VM is not running
Date: Wed, 27 Aug 2014 13:16:37 +0800 [thread overview]
Message-ID: <53FD69B5.9010604@redhat.com> (raw)
In-Reply-To: <1409040377-12088-1-git-send-email-zhang.zhanghailiang@huawei.com>
On 08/26/2014 04:06 PM, zhanghailiang wrote:
> For all NICs(except virtio-net) emulated by qemu,
> Such as e1000, rtl8139, pcnet and ne2k_pci,
> Qemu can still receive packets when VM is not running.
>
> If this happened in *migration's* last PAUSE VM stage, but
> before the end of the migration, the new receiving packets will possibly dirty
> parts of RAM which has been cached in *iovec*(will be sent asynchronously) and
> dirty parts of new RAM which will be missed.
> This will lead serious network fault in VM.
>
> To avoid this, we forbid receiving packets in generic net code when
> VM is not running.
>
> Bug reproduction steps:
> (1) Start a VM which configured at least one NIC
> (2) In VM, open several Terminal and do *Ping IP -i 0.1*
> (3) Migrate the VM repeatedly between two Hosts
> And the *PING* command in VM will very likely fail with message:
> 'Destination HOST Unreachable', the NIC in VM will stay unavailable unless you
> run 'service network restart'
>
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> ---
> v4:
> - The action of flush queued packets is unnecessary, remove this.
> (Thanks for the help of Jason Wang and Stefan).
>
> v3:
> - change the 'vmstate' to 'vm_running'
>
> v2:
> - remove the superfluous check of nc->received_disabled
> ---
>
> net/net.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/net/net.c b/net/net.c
> index 6d930ea..4cb92c0 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -41,6 +41,7 @@
> #include "qapi-visit.h"
> #include "qapi/opts-visitor.h"
> #include "qapi/dealloc-visitor.h"
> +#include "sysemu/sysemu.h"
>
> /* Net bridge is currently not supported for W32. */
> #if !defined(_WIN32)
> @@ -452,6 +453,12 @@ void qemu_set_vnet_hdr_len(NetClientState *nc, int len)
>
> int qemu_can_send_packet(NetClientState *sender)
> {
> + int vm_running = runstate_is_running();
> +
> + if (!vm_running) {
> + return 0;
> + }
> +
> if (!sender->peer) {
> return 1;
> }
Reviewed-by: Jason Wang <jasowang@redhat.com>
next prev parent reply other threads:[~2014-08-27 5:17 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-26 8:06 [Qemu-devel] [PATCH V4] net: Forbid dealing with packets when VM is not running zhanghailiang
2014-08-27 5:16 ` Jason Wang [this message]
2014-08-27 10:28 ` Juan Quintela
2014-08-27 11:53 ` Michael S. Tsirkin
2014-08-27 11:59 ` Michael S. Tsirkin
2014-08-28 0:38 ` zhanghailiang
2014-09-01 18:40 ` Stefan Hajnoczi
2014-09-02 9:06 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53FD69B5.9010604@redhat.com \
--to=jasowang@redhat.com \
--cc=aliguori@amazon.com \
--cc=luonengjun@huawei.com \
--cc=mst@redhat.com \
--cc=peter.huangpeng@huawei.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=zhang.zhanghailiang@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.