From 9024dab3d9da87cf492c163b22deafcef0ff75ec Mon Sep 17 00:00:00 2001 From: Jerome Soumagne Date: Wed, 22 Jan 2025 20:49:52 -0600 Subject: [PATCH] prov/tcp: Fix FI_MULTI_RECV not set on error When multiple multi-recv buffers are posted, FI_MULTI_RECV would only be set on error if an mrecv entry was already created, meaning the buffer would have already been in-use. If the buffer has not been used yet and a cancelation for this buffer has been processed, correctly set FI_MULTI_RECV when reporting the error, indicating that the buffer is no longer in use. Signed-off-by: Jerome Soumagne --- prov/tcp/src/xnet_cq.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/prov/tcp/src/xnet_cq.c b/prov/tcp/src/xnet_cq.c index 03ea975371d..2090bdf7170 100644 --- a/prov/tcp/src/xnet_cq.c +++ b/prov/tcp/src/xnet_cq.c @@ -202,13 +202,15 @@ void xnet_report_error(struct xnet_xfer_entry *xfer_entry, int err) err_entry.flags = xfer_entry->cq_flags & ~FI_COMPLETION; if (err_entry.flags & FI_RECV) { - if (xfer_entry->ctrl_flags & XNET_MULTI_RECV && - xfer_entry->mrecv) { - xfer_entry->mrecv->ref_cnt--; - if (!xfer_entry->mrecv->ref_cnt) { + if (xfer_entry->ctrl_flags & XNET_MULTI_RECV) { + if (xfer_entry->mrecv) { + xfer_entry->mrecv->ref_cnt--; + if (!xfer_entry->mrecv->ref_cnt) { + err_entry.flags |= FI_MULTI_RECV; + free(xfer_entry->mrecv); + } + } else err_entry.flags |= FI_MULTI_RECV; - free(xfer_entry->mrecv); - } } xnet_get_cq_info(xfer_entry, &err_entry.flags, &err_entry.data, &err_entry.tag);