diff options
-rw-r--r-- | src/vnet/interface_output.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/vnet/interface_output.c b/src/vnet/interface_output.c index 2e4f36005ad..28f44c3d42a 100644 --- a/src/vnet/interface_output.c +++ b/src/vnet/interface_output.c @@ -713,6 +713,7 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, { drop_one_buffer_and_count (vm, vnm, node, from - 1, VNET_INTERFACE_OUTPUT_ERROR_NO_BUFFERS_FOR_GSO); + b += 1; continue; } @@ -737,17 +738,14 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, vlib_get_new_next_frame (vm, node, next_index, to_tx, n_left_to_tx); } - else + while (n_tx_bufs > 0) { - while (n_tx_bufs > 0) - { - to_tx[0] = from_tx_seg[0]; - to_tx += 1; - from_tx_seg += 1; - n_left_to_tx -= 1; - n_tx_bufs -= 1; - n_packets += 1; - } + to_tx[0] = from_tx_seg[0]; + to_tx += 1; + from_tx_seg += 1; + n_left_to_tx -= 1; + n_tx_bufs -= 1; + n_packets += 1; } } n_bytes += n_tx_bytes; @@ -763,6 +761,7 @@ vnet_interface_output_node_inline_gso (vlib_main_t * vm, _vec_len (ptd->split_buffers) = 0; /* Free the now segmented buffer */ vlib_buffer_free_one (vm, bi0); + b += 1; continue; } } |