]> www.infradead.org Git - users/dwmw2/qemu.git/commitdiff
migration/rdma: Send error during cancelling
authorDr. David Alan Gilbert <dgilbert@redhat.com>
Mon, 17 Jul 2017 11:09:36 +0000 (12:09 +0100)
committerJuan Quintela <quintela@redhat.com>
Tue, 18 Jul 2017 15:36:18 +0000 (17:36 +0200)
When we issue a cancel and clean up the RDMA channel
send a CONTROL_ERROR to get the destination to quit.

The rdma_cleanup code waits for the event to come back
from the rdma_disconnect; but that wont happen until the
destination quits and there's currently nothing to force
it.

Note this makes the case of a cancel work while the destination
is alive, and it already works if the destination is
truly dead.  Note it doesn't fix the case where the destination
is hung (we get stuck waiting for the rdma_disconnect event).

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Message-Id: <20170717110936.23314-7-dgilbert@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
migration/rdma.c

index 972167d899af58255b83fc190ffb0dbdfaeaa599..ca56594328b64dbaedc49f73b1a33980f7b22c7e 100644 (file)
@@ -2269,7 +2269,9 @@ static void qemu_rdma_cleanup(RDMAContext *rdma)
     int ret, idx;
 
     if (rdma->cm_id && rdma->connected) {
-        if (rdma->error_state && !rdma->received_error) {
+        if ((rdma->error_state ||
+             migrate_get_current()->state == MIGRATION_STATUS_CANCELLING) &&
+            !rdma->received_error) {
             RDMAControlHeader head = { .len = 0,
                                        .type = RDMA_CONTROL_ERROR,
                                        .repeat = 1,