From: bugzilla@dpdk.org
To: dev@dpdk.org
Subject: [DPDK/ethdev Bug 1779] Packet segments do not get freed in mprq_buf_to_pkt() upon encountering MLX5_RXQ_CODE_NOMBUF
Date: Thu, 21 Aug 2025 03:11:37 +0000 [thread overview]
Message-ID: <bug-1779-3@https.bugs.dpdk.org/> (raw)
[-- Attachment #1: Type: text/plain, Size: 1819 bytes --]
https://bugs.dpdk.org/show_bug.cgi?id=1779
Bug ID: 1779
Summary: Packet segments do not get freed in mprq_buf_to_pkt()
upon encountering MLX5_RXQ_CODE_NOMBUF
Product: DPDK
Version: 22.11
Hardware: x86
OS: Linux
Status: UNCONFIRMED
Severity: major
Priority: Normal
Component: ethdev
Assignee: dev@dpdk.org
Reporter: canary.overflow@gmail.com
Target Milestone: ---
drivers/net/mlx5/mlx5_rx.h mprq_buf_to_pkt(...):
There are 2 issues:
- uint32_t seg_len = RTE_MIN(len, (uint32_t)(pkt->buf_len -
RTE_PKTMBUF_HEADROOM)) seems unnecessary as to hit this code, len has to be
greater than (uint32_t)(pkt->buf_len - RTE_PKTMBUF_HEADROOM) due to the if
condition
- If the allocation struct rte_mbuf *next = rte_pktmbuf_alloc(rxq->mp) fails
and packet has more than 2 segs, the segs that were allocated previously do not
get freed
mprq_buf_to_pkt(...) {
...
} else if (rxq->strd_scatter_en) {
struct rte_mbuf *prev = pkt;
uint32_t seg_len = RTE_MIN(len, (uint32_t)
(pkt->buf_len - RTE_PKTMBUF_HEADROOM));
uint32_t rem_len = len - seg_len;
rte_memcpy(rte_pktmbuf_mtod(pkt, void *), addr, seg_len);
DATA_LEN(pkt) = seg_len;
while (rem_len) {
struct rte_mbuf *next = rte_pktmbuf_alloc(rxq->mp);
if (unlikely(next == NULL))
return MLX5_RXQ_CODE_NOMBUF;
...
}
...
}
...
}
Should rte_pktmbuf_free() be used instead?
--
You are receiving this mail because:
You are the assignee for the bug.
[-- Attachment #2: Type: text/html, Size: 3736 bytes --]
reply other threads:[~2025-08-21 3:11 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bug-1779-3@https.bugs.dpdk.org/ \
--to=bugzilla@dpdk.org \
--cc=dev@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.