From bfd6ca6148492a76d9c5b38353aa07095ab7d3eb Mon Sep 17 00:00:00 2001 From: Di Wang Date: Wed, 22 Jan 2025 19:24:36 +0000 Subject: [PATCH] cleanup mrecx entry if current rx processing failed Signed-off-by: Di Wang --- prov/tcp/src/xnet.h | 2 ++ prov/tcp/src/xnet_progress.c | 2 ++ prov/tcp/src/xnet_srx.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/prov/tcp/src/xnet.h b/prov/tcp/src/xnet.h index 486af642d47..1594601983a 100644 --- a/prov/tcp/src/xnet.h +++ b/prov/tcp/src/xnet.h @@ -228,6 +228,8 @@ struct xnet_srx { xnet_profile_t *profile; }; +bool +xnet_srx_cancel_rx(struct xnet_srx *srx, struct slist *queue, void *context); int xnet_srx_context(struct fid_domain *domain, struct fi_rx_attr *attr, struct fid_ep **rx_ep, void *context); diff --git a/prov/tcp/src/xnet_progress.c b/prov/tcp/src/xnet_progress.c index aa76968e175..ef61672612e 100644 --- a/prov/tcp/src/xnet_progress.c +++ b/prov/tcp/src/xnet_progress.c @@ -1114,6 +1114,8 @@ static void xnet_complete_rx(struct xnet_ep *ep, ssize_t ret) cq_error: FI_WARN(&xnet_prov, FI_LOG_EP_DATA, "msg recv failed ret = %zd (%s)\n", ret, fi_strerror((int)-ret)); + if (rx_entry->ctrl_flags & XNET_MULTI_RECV) + xnet_srx_cancel_rx(ep->srx, &ep->srx->rx_queue, rx_entry->context); xnet_cntr_incerr(rx_entry); xnet_report_error(rx_entry, (int) -ret); xnet_free_xfer(xnet_ep2_progress(ep), rx_entry); diff --git a/prov/tcp/src/xnet_srx.c b/prov/tcp/src/xnet_srx.c index 153504fe955..d391c3883d3 100644 --- a/prov/tcp/src/xnet_srx.c +++ b/prov/tcp/src/xnet_srx.c @@ -712,7 +712,7 @@ xnet_match_tag_addr(struct xnet_srx *srx, struct xnet_ep *ep, uint64_t tag) return rx_entry; } -static bool +bool xnet_srx_cancel_rx(struct xnet_srx *srx, struct slist *queue, void *context) { struct slist_entry *cur, *prev;