| From 645b33dbf1c58f184b4b7a1f78f8540fa46e5df7 Mon Sep 17 00:00:00 2001 |
| From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> |
| Date: Thu, 27 Jul 2017 12:06:59 +0200 |
| Subject: [PATCH 11/17] migration/rdma: Send error during cancelling |
| |
| RH-Author: Dr. David Alan Gilbert <dgilbert@redhat.com> |
| Message-id: <20170727120659.8640-6-dgilbert@redhat.com> |
| Patchwork-id: 75861 |
| O-Subject: [Pegas-1.0 qemu-kvm PATCH 5/5] migration/rdma: Send error during cancelling |
| Bugzilla: 1475751 |
| RH-Acked-by: Peter Xu <peterx@redhat.com> |
| RH-Acked-by: Laurent Vivier <lvivier@redhat.com> |
| RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com> |
| |
| From: "Dr. David Alan Gilbert" <dgilbert@redhat.com> |
| |
| 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> |
| (cherry picked from commit 32bce196344772df8d68ab40e2dd1dd57be1aa7c) |
| Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com> |
| |
| migration/rdma.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/migration/rdma.c b/migration/rdma.c |
| index fa88ccf..cc319a1 100644 |
| |
| |
| @@ -2267,7 +2267,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, |
| -- |
| 1.8.3.1 |
| |