On Wed, Aug 19, 2026 at 9:17 PM Peter Xu <[email protected]> wrote:
>
> On Mon, Aug 17, 2026 at 06:51:16PM +0800, Yanfei Xu wrote:
> > The source return-path thread can send READY before the destination has
> > posted its initial receive.  Since RNR retries default to zero, the send
> > can fail and abort migration.
> >
> > Post the initial receive before rdma_accept() to close this window.
> >
> > Fixes: 55cc1b5937a8 ("migration: create a dedicated connection for rdma 
> > return path")
> > Signed-off-by: Yanfei Xu <[email protected]>
>
> This one looks correct to me,
>
> Reviewed-by: Peter Xu <[email protected]>
Reviewed-by: Jack Wang <[email protected]>
>
> Do you have way to reproduce it, or is this theory (or can be reproduced by
> adding delays)?
>
> > ---
> >  migration/rdma.c | 12 ++++++------
> >  1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/migration/rdma.c b/migration/rdma.c
> > index e17ace62b0..6e8436ccc1 100644
> > --- a/migration/rdma.c
> > +++ b/migration/rdma.c
> > @@ -3263,6 +3263,12 @@ static int qemu_rdma_accept(RDMAContext *rdma)
> >          }
> >      }
> >
> > +    ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY, &err);
> > +    if (ret < 0) {
> > +        error_report_err(err);
> > +        goto err_rdma_dest_wait;
> > +    }
> > +
> >      /* Accept the second connection request for return path */
> >      if ((migrate_postcopy() || migrate_return_path())
> >          && !rdma->is_return_path) {
> > @@ -3295,12 +3301,6 @@ static int qemu_rdma_accept(RDMAContext *rdma)
> >      rdma_ack_cm_event(cm_event);
> >      rdma->connected = true;
> >
> > -    ret = qemu_rdma_post_recv_control(rdma, RDMA_WRID_READY, &err);
> > -    if (ret < 0) {
> > -        error_report_err(err);
> > -        goto err_rdma_dest_wait;
> > -    }
> > -
> >      qemu_rdma_dump_gid("dest_connect", rdma->cm_id);
> >
> >      return 0;
> > --
> > 2.20.1
> >
>
> --
> Peter Xu
>

Reply via email to