[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/5] migration/rdma: Fix race on source
From: |
Peter Xu |
Subject: |
Re: [Qemu-devel] [PATCH 1/5] migration/rdma: Fix race on source |
Date: |
Wed, 12 Jul 2017 11:13:17 +0800 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Tue, Jul 04, 2017 at 07:49:11PM +0100, Dr. David Alan Gilbert (git) wrote:
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Fix a race where the destination might try and send the source a
> WRID_READY before the source has done a post-recv for it.
>
> rdma_post_recv has to happen after the qp exists, and we're
> OK since we've already called qemu_rdma_source_init that calls
> qemu_alloc_qp.
Though I am not very familiar with the whole RDMA path, this makes
sense to me.
>
> This corresponds to:
> https://bugzilla.redhat.com/show_bug.cgi?id=1285044
>
> The race can be triggered by adding a few ms wait before this
> post_recv_control (which was originally due to me turning on loads of
> debug).
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
Reviewed-by: Peter Xu <address@hidden>
> ---
> migration/rdma.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/migration/rdma.c b/migration/rdma.c
> index c6bc607a03..6111e10c70 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -2365,6 +2365,12 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error
> **errp)
>
> caps_to_network(&cap);
>
> + ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY);
> + if (ret) {
> + ERROR(errp, "posting second control recv");
> + goto err_rdma_source_connect;
> + }
> +
> ret = rdma_connect(rdma->cm_id, &conn_param);
> if (ret) {
> perror("rdma_connect");
> @@ -2405,12 +2411,6 @@ static int qemu_rdma_connect(RDMAContext *rdma, Error
> **errp)
>
> rdma_ack_cm_event(cm_event);
>
> - ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY);
> - if (ret) {
> - ERROR(errp, "posting second control recv!");
> - goto err_rdma_source_connect;
> - }
> -
> rdma->control_ready_expected = 1;
> rdma->nb_sent = 0;
> return 0;
> --
> 2.13.0
>
--
Peter Xu
[Qemu-devel] [PATCH 4/5] migration/rdma: Safely convert control types, Dr. David Alan Gilbert (git), 2017/07/04
[Qemu-devel] [PATCH 5/5] migration/rdma: Send error during cancelling, Dr. David Alan Gilbert (git), 2017/07/04