On Mon, 17 Nov 2025 12:51:51 +0100 Morten Brørup <[email protected]> wrote:
> While working on a rte_pktmbuf_copy_bulk() function, I noticed a couple of > bugs in rte_pktmbuf_copy(): > > 1. If the copy is allocated from a mempool using pinned external buffers, the > copy's RTE_MBUF_F_EXTERNAL flag is lost. > This is simple to fix: > > - /* copied mbuf is not indirect or external */ > - mc->ol_flags = m->ol_flags & ~(RTE_MBUF_F_INDIRECT|RTE_MBUF_F_EXTERNAL); > + /* copy flags except indirect and external */ > + mc->ol_flags |= m->ol_flags & > ~(RTE_MBUF_F_INDIRECT|RTE_MBUF_F_EXTERNAL); Good catch, external flag needs to be preserved. > 2. If the packet is copied with non-zero offset, much of the metadata do not > apply to the copy, e.g. many of the offload flags and the packet_type field. > Maybe metadata should be reset when copying with a non-zero offset? > Or maybe rte_pktmbuf_copy() should be considered "payload copy", so the copy > should have all metadata reset? The use case for using offset, is for removing tunnel headers. I expect that the code doing so would know what manipulation of offloads was required.

