l4p/tcp: fix seq calculation in partial ack 38/18838/2
authorJielong Zhou <jielong.zjl@antfin.com>
Mon, 17 Dec 2018 02:55:12 +0000 (10:55 +0800)
committerKonstantin Ananyev <konstantin.ananyev@intel.com>
Thu, 23 May 2019 12:22:54 +0000 (12:22 +0000)
Change-Id: I46fc0eb7f32dfafd22527c7711520cd3a1a0f48a
Signed-off-by: Jielong Zhou <jielong.zjl@antfin.com>
lib/libtle_l4p/tcp_rxtx.c

index 3f4f324..c0a0dd1 100644 (file)
@@ -473,10 +473,9 @@ tx_nxt_data(struct tle_tcp_stream *s, uint32_t tms)
 static inline void
 free_una_data(struct tle_tcp_stream *s, uint32_t len)
 {
-       uint32_t i, n, num, plen;
+       uint32_t i, num, plen;
        struct rte_mbuf **mi;
 
-       n = 0;
        plen = 0;
 
        do {
@@ -487,12 +486,14 @@ free_una_data(struct tle_tcp_stream *s, uint32_t len)
                        break;
 
                /* free acked data */
-               for (i = 0; i != num && n != len; i++, n = plen) {
-                       plen += PKT_L4_PLEN(mi[i]);
-                       if (plen > len) {
+               for (i = 0; i != num && plen != len; i++) {
+                       uint32_t next_pkt_len = PKT_L4_PLEN(mi[i]);
+                       if (plen + next_pkt_len > len) {
                                /* keep SND.UNA at the start of the packet */
-                               len -= RTE_MIN(len, plen - len);
+                               len = plen;
                                break;
+                       } else {
+                               plen += next_pkt_len;
                        }
                        rte_pktmbuf_free(mi[i]);
                }