As Stephen Hemminger <stephen@networkplumber.org> pointed out:
vlan_insert will fail if the mbuf is has refcnt > 1.
static inline int rte_vlan_insert(struct rte_mbuf **m)
{
struct rte_ether_hdr *oh, *nh;
struct rte_vlan_hdr *vh;
/* Can't insert header if mbuf is shared */
if (!RTE_MBUF_DIRECT(*m) || rte_mbuf_refcnt_read(*m) > 1)
return -EINVAL;
So closing as not a bug.