net/nfp: fix releasing muti-segment mbufs
[dpdk.git] / drivers / net / nfp / nfp_net.c
index eda87a5..5c5cba1 100644 (file)
@@ -2096,18 +2096,20 @@ nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
                 */
                pkt_size = pkt->pkt_len;
 
-               /* Releasing mbuf which was prefetched above */
-               if (*lmbuf)
-                       rte_pktmbuf_free(*lmbuf);
-               /*
-                * Linking mbuf with descriptor for being released
-                * next time descriptor is used
-                */
-               *lmbuf = pkt;
-
                while (pkt_size) {
                        /* Copying TSO, VLAN and cksum info */
                        *txds = txd;
+
+                       /* Releasing mbuf used by this descriptor previously*/
+                       if (*lmbuf)
+                               rte_pktmbuf_free_seg(*lmbuf);
+
+                       /*
+                        * Linking mbuf with descriptor for being released
+                        * next time descriptor is used
+                        */
+                       *lmbuf = pkt;
+
                        dma_size = pkt->data_len;
                        dma_addr = rte_mbuf_data_dma_addr(pkt);
                        PMD_TX_LOG(DEBUG, "Working with mbuf at dma address:"
@@ -2135,6 +2137,7 @@ nfp_net_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
                        }
                        /* Referencing next free TX descriptor */
                        txds = &txq->txds[txq->wr_p];
+                       lmbuf = &txq->txbufs[txq->wr_p].mbuf;
                        issued_descs++;
                }
                i++;