From 68b5f314a269979b4f2014eb22873732d4745bcc Mon Sep 17 00:00:00 2001 From: Yuri Benditovich Date: Tue, 1 Nov 2016 00:01:17 +0200 Subject: [PATCH 1/3] net: skip virtio-net config of deleted nic's peers https://bugzilla.redhat.com/show_bug.cgi?id=1373816 qemu core dump happens during repetitive unpug-plug with multiple queues and Windows RSS-capable guest. If back-end delete requested during virtio-net device initialization, driver still can try configure the device for multiple queues. The virtio-net device is expected to be removed as soon as the initialization is done. Signed-off-by: Yuri Benditovich Signed-off-by: Jason Wang --- hw/net/virtio-net.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c index 06bfe4bcc9..77a4fae399 100644 --- a/hw/net/virtio-net.c +++ b/hw/net/virtio-net.c @@ -508,6 +508,10 @@ static void virtio_net_set_queues(VirtIONet *n) int i; int r; + if (n->nic->peer_deleted) { + return; + } + for (i = 0; i < n->max_queues; i++) { if (i < n->curr_queues) { r = peer_attach(n, i); From e79cd4068063ea2859199002a049010a11202939 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Fri, 4 Nov 2016 15:46:33 +0000 Subject: [PATCH 2/3] net: fix sending of data with -net socket, listen backend The use of -net socket,listen was broken in the following commit commit 16a3df403b10c4ac347159e39005fd520b2648bb Author: Zhang Chen Date: Fri May 13 15:35:19 2016 +0800 net/net: Add SocketReadState for reuse codes This function is from net/socket.c, move it to net.c and net.h. Add SocketReadState to make others reuse net_fill_rstate(). suggestion from jason. This refactored the state out of NetSocketState into a separate SocketReadState. This refactoring requires that a callback is provided to be triggered upon completion of a packet receive from the guest. The patch only registered this callback in the codepaths hit by -net socket,connect, not -net socket,listen. So as a result packets sent by the guest in the latter case get dropped on the floor. This bug is hidden because net_fill_rstate() silently does nothing if the callback is not set. This patch adds in the middle callback registration and also adds an assert so that QEMU aborts if there are any other codepaths hit which are missing the callback. Signed-off-by: Daniel P. Berrange Reviewed-by: Zhang Chen Signed-off-by: Jason Wang --- net/net.c | 5 ++--- net/socket.c | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net/net.c b/net/net.c index ec984bf782..939fe3193a 100644 --- a/net/net.c +++ b/net/net.c @@ -1653,9 +1653,8 @@ int net_fill_rstate(SocketReadState *rs, const uint8_t *buf, int size) if (rs->index >= rs->packet_len) { rs->index = 0; rs->state = 0; - if (rs->finalize) { - rs->finalize(rs); - } + assert(rs->finalize); + rs->finalize(rs); } break; } diff --git a/net/socket.c b/net/socket.c index 982c8debe4..fe3547b018 100644 --- a/net/socket.c +++ b/net/socket.c @@ -511,6 +511,7 @@ static int net_socket_listen_init(NetClientState *peer, s->fd = -1; s->listen_fd = ret; s->nc.link_down = true; + net_socket_rs_init(&s->rs, net_socket_rs_finalize); qemu_set_fd_handler(s->listen_fd, net_socket_accept, NULL, s); qapi_free_SocketAddress(saddr); From a38299bf431a891c0a21a77199e7148c0983413e Mon Sep 17 00:00:00 2001 From: Zhang Chen Date: Tue, 1 Nov 2016 11:38:12 +0800 Subject: [PATCH 3/3] docs: fix COLO architecture diagram Fix COLO-Proxy part of COLO architecture diagram Signed-off-by: Zhang Chen Reviewed-by: zhanghailiang Signed-off-by: Jason Wang --- docs/COLO-FT.txt | 72 +++++++++++++++++++++++++----------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/docs/COLO-FT.txt b/docs/COLO-FT.txt index 628293824c..e289be2f41 100644 --- a/docs/COLO-FT.txt +++ b/docs/COLO-FT.txt @@ -41,41 +41,43 @@ identical responses to all client requests. Once the differences in the outputs are detected between the PVM and SVM, COLO withholds transmission of the outbound packets until it has successfully synchronized the PVM state to the SVM. - Primary Node Secondary Node - +------------+ +-----------------------+ +------------------------+ +------------+ - | | | HeartBeat |<----->| HeartBeat | | | - | Primary VM | +-----------|-----------+ +-----------|------------+ |Secondary VM| - | | | | | | - | | +-----------|-----------+ +-----------|------------+ | | - | | |QEMU +---v----+ | |QEMU +----v---+ | | | - | | | |Failover| | | |Failover| | | | - | | | +--------+ | | +--------+ | | | - | | | +---------------+ | | +---------------+ | | | - | | | | VM Checkpoint |-------------->| VM Checkpoint | | | | - | | | +---------------+ | | +---------------+ | | | - | | | | | | | | - |Requests<---------------------------^------------------------------------------>Requests| - |Responses----------------------\ /--|--------------\ /------------------------Responses| - | | | | | | | | | | | | | - | | | +-----------+ | | | | | | | +------------+ | | | - | | | | COLO disk | | | | | | | | | COLO disk | | | | - | | | | Manager |-|-|--|--------------|--|->| Manager | | | | - | | | +|----------+ | | | | | | | +-----------|+ | | | - | | | | | | | | | | | | | | | - +------------+ +--|------------|-|--|--+ +---|--|--------------|--+ +------------+ - | | | | | | | - +-------------+ | +----------v-v--|--+ +---|--v-----------+ | +-------------+ - | VM Monitor | | | COLO Proxy | | COLO Proxy | | | VM Monitor | - | | | |(compare packet) | | (adjust sequence)| | | | - +-------------+ | +----------|----^--+ +------------------+ | +-------------+ - | | | | - +------------------|------------|----|--+ +---------------------|------------------+ - | Kernel | | | | | Kernel | | - +------------------|------------|----|--+ +---------------------|------------------+ - | | | | - +--------------v+ +--------v----|--+ +------------------+ +v-------------+ - | Storage | |External Network| | External Network | | Storage | - +---------------+ +----------------+ +------------------+ +--------------+ + Primary Node Secondary Node ++------------+ +-----------------------+ +------------------------+ +------------+ +| | | HeartBeat +<----->+ HeartBeat | | | +| Primary VM | +-----------+-----------+ +-----------+------------+ |Secondary VM| +| | | | | | +| | +-----------|-----------+ +-----------|------------+ | | +| | |QEMU +---v----+ | |QEMU +----v---+ | | | +| | | |Failover| | | |Failover| | | | +| | | +--------+ | | +--------+ | | | +| | | +---------------+ | | +---------------+ | | | +| | | | VM Checkpoint +-------------->+ VM Checkpoint | | | | +| | | +---------------+ | | +---------------+ | | | +|Requests<--------------------------\ /-----------------\ /--------------------->Requests| +| | | ^ ^ | | | | | | | +|Responses+---------------------\ /-|-|------------\ /-------------------------+Responses| +| | | | | | | | | | | | | | | | +| | | +-----------+ | | | | | | | | | | +----------+ | | | +| | | | COLO disk | | | | | | | | | | | | COLO disk| | | | +| | | | Manager +---------------------------->| Manager | | | | +| | | ++----------+ v v | | | | | v v | +---------++ | | | +| | | |+-----------+-+-+-++| | ++-+--+-+---------+ | | | | +| | | || COLO Proxy || | | COLO Proxy | | | | | +| | | || (compare packet || | |(adjust sequence | | | | | +| | | ||and mirror packet)|| | | and ACK) | | | | | +| | | |+------------+---+-+| | +-----------------+ | | | | ++------------+ +-----------------------+ +------------------------+ +------------+ ++------------+ | | | | +------------+ +| VM Monitor | | | | | | VM Monitor | ++------------+ | | | | +------------+ ++---------------------------------------+ +----------------------------------------+ +| Kernel | | | | | Kernel | | ++---------------------------------------+ +----------------------------------------+ + | | | | + +--------------v+ +---------v---+--+ +------------------+ +v-------------+ + | Storage | |External Network| | External Network | | Storage | + +---------------+ +----------------+ +------------------+ +--------------+ + == Components introduction ==