Message ID | 20220208085640.19702-1-jinpu.wang@ionos.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] migration/rdma: set the REUSEADDR option for destination | expand |
* Jack Wang (jinpu.wang@ionos.com) wrote: > We hit following error during testing RDMA transport: > in case of migration error, mgmt daemon pick one migration port, > incoming rdma:[::]:8089: RDMA ERROR: Error: could not rdma_bind_addr > > Then try another -incoming rdma:[::]:8103, sometime it worked, > sometimes need another try with other ports number. > > Set the REUSEADDR option for destination, This allow address could > be reused to avoid rdma_bind_addr error out. > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > v2: extend commit message as discussed with Pankaj and David > --- > migration/rdma.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/migration/rdma.c b/migration/rdma.c > index c7c7a384875b..663e1fbb096d 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -2705,6 +2705,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > char ip[40] = "unknown"; > struct rdma_addrinfo *res, *e; > char port_str[16]; > + int reuse = 1; > > for (idx = 0; idx < RDMA_WRID_MAX; idx++) { > rdma->wr_data[idx].control_len = 0; > @@ -2740,6 +2741,12 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > goto err_dest_init_bind_addr; > } > > + ret = rdma_set_option(listen_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR, > + &reuse, sizeof reuse); > + if (ret) { > + ERROR(errp, "Error: could not set REUSEADDR option"); > + goto err_dest_init_bind_addr; > + } > for (e = res; e != NULL; e = e->ai_next) { > inet_ntop(e->ai_family, > &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip); > -- > 2.25.1 >
> We hit following error during testing RDMA transport: > in case of migration error, mgmt daemon pick one migration port, > incoming rdma:[::]:8089: RDMA ERROR: Error: could not rdma_bind_addr > > Then try another -incoming rdma:[::]:8103, sometime it worked, > sometimes need another try with other ports number. > > Set the REUSEADDR option for destination, This allow address could > be reused to avoid rdma_bind_addr error out. > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> > --- > v2: extend commit message as discussed with Pankaj and David > --- > migration/rdma.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/migration/rdma.c b/migration/rdma.c > index c7c7a384875b..663e1fbb096d 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -2705,6 +2705,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > char ip[40] = "unknown"; > struct rdma_addrinfo *res, *e; > char port_str[16]; > + int reuse = 1; > > for (idx = 0; idx < RDMA_WRID_MAX; idx++) { > rdma->wr_data[idx].control_len = 0; > @@ -2740,6 +2741,12 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > goto err_dest_init_bind_addr; > } > > + ret = rdma_set_option(listen_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR, > + &reuse, sizeof reuse); > + if (ret) { > + ERROR(errp, "Error: could not set REUSEADDR option"); > + goto err_dest_init_bind_addr; > + } > for (e = res; e != NULL; e = e->ai_next) { > inet_ntop(e->ai_family, > &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip); Reviewed-by: Pankaj Gupta <pankaj.gupta@ionos.com
* Jack Wang (jinpu.wang@ionos.com) wrote: > We hit following error during testing RDMA transport: > in case of migration error, mgmt daemon pick one migration port, > incoming rdma:[::]:8089: RDMA ERROR: Error: could not rdma_bind_addr > > Then try another -incoming rdma:[::]:8103, sometime it worked, > sometimes need another try with other ports number. > > Set the REUSEADDR option for destination, This allow address could > be reused to avoid rdma_bind_addr error out. > > Signed-off-by: Jack Wang <jinpu.wang@ionos.com> Queued > --- > v2: extend commit message as discussed with Pankaj and David > --- > migration/rdma.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/migration/rdma.c b/migration/rdma.c > index c7c7a384875b..663e1fbb096d 100644 > --- a/migration/rdma.c > +++ b/migration/rdma.c > @@ -2705,6 +2705,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > char ip[40] = "unknown"; > struct rdma_addrinfo *res, *e; > char port_str[16]; > + int reuse = 1; > > for (idx = 0; idx < RDMA_WRID_MAX; idx++) { > rdma->wr_data[idx].control_len = 0; > @@ -2740,6 +2741,12 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) > goto err_dest_init_bind_addr; > } > > + ret = rdma_set_option(listen_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR, > + &reuse, sizeof reuse); > + if (ret) { > + ERROR(errp, "Error: could not set REUSEADDR option"); > + goto err_dest_init_bind_addr; > + } > for (e = res; e != NULL; e = e->ai_next) { > inet_ntop(e->ai_family, > &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip); > -- > 2.25.1 > >
diff --git a/migration/rdma.c b/migration/rdma.c index c7c7a384875b..663e1fbb096d 100644 --- a/migration/rdma.c +++ b/migration/rdma.c @@ -2705,6 +2705,7 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) char ip[40] = "unknown"; struct rdma_addrinfo *res, *e; char port_str[16]; + int reuse = 1; for (idx = 0; idx < RDMA_WRID_MAX; idx++) { rdma->wr_data[idx].control_len = 0; @@ -2740,6 +2741,12 @@ static int qemu_rdma_dest_init(RDMAContext *rdma, Error **errp) goto err_dest_init_bind_addr; } + ret = rdma_set_option(listen_id, RDMA_OPTION_ID, RDMA_OPTION_ID_REUSEADDR, + &reuse, sizeof reuse); + if (ret) { + ERROR(errp, "Error: could not set REUSEADDR option"); + goto err_dest_init_bind_addr; + } for (e = res; e != NULL; e = e->ai_next) { inet_ntop(e->ai_family, &((struct sockaddr_in *) e->ai_dst_addr)->sin_addr, ip, sizeof ip);
We hit following error during testing RDMA transport: in case of migration error, mgmt daemon pick one migration port, incoming rdma:[::]:8089: RDMA ERROR: Error: could not rdma_bind_addr Then try another -incoming rdma:[::]:8103, sometime it worked, sometimes need another try with other ports number. Set the REUSEADDR option for destination, This allow address could be reused to avoid rdma_bind_addr error out. Signed-off-by: Jack Wang <jinpu.wang@ionos.com> --- v2: extend commit message as discussed with Pankaj and David --- migration/rdma.c | 7 +++++++ 1 file changed, 7 insertions(+)