diff --git a/prov/sockets/include/sock.h b/prov/sockets/include/sock.h index 5395fa459bd..27cc3836cd7 100644 --- a/prov/sockets/include/sock.h +++ b/prov/sockets/include/sock.h @@ -611,6 +611,7 @@ struct sock_rx_entry { uint64_t flags; uint64_t context; uint64_t addr; + union ofi_sock_ip sock_addr; uint64_t data; uint64_t tag; uint64_t ignore; diff --git a/prov/sockets/src/sock_progress.c b/prov/sockets/src/sock_progress.c index a926288e4e5..3ad2228b55f 100644 --- a/prov/sockets/src/sock_progress.c +++ b/prov/sockets/src/sock_progress.c @@ -1216,6 +1216,12 @@ static int sock_pe_progress_buffered_rx(struct sock_rx_ctx *rx_ctx, if (!rx_buffered->is_complete || rx_buffered->is_claimed) continue; + if (rx_buffered->addr == FI_ADDR_NOTAVAIL) { + rx_buffered->addr = sock_av_get_addr_index(rx_ctx->av, &rx_buffered->sock_addr); + if (rx_buffered->addr == FI_ADDR_NOTAVAIL) { + continue; + } + } rx_posted = sock_rx_get_entry(rx_ctx, rx_buffered->addr, rx_buffered->tag, rx_buffered->is_tagged); @@ -1375,6 +1381,9 @@ static int sock_pe_process_rx_send(struct sock_pe *pe, } rx_entry->addr = pe_entry->addr; + if (rx_entry->addr == FI_ADDR_NOTAVAIL) { + rx_entry->sock_addr = pe_entry->conn->addr; + } rx_entry->tag = pe_entry->tag; rx_entry->data = pe_entry->data; rx_entry->ignore = 0;