The initial issue was the break statement exited out of the for loop unconditionally. Now, the break only happens if rfd is null, out_of_resources or bytes_copied < payload_size.
Signed-off-by: Soumyajyotii Ssarkar <[email protected]> --- hw/net/i82596.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/net/i82596.c b/hw/net/i82596.c index f0b22093f9..541ad7dad3 100644 --- a/hw/net/i82596.c +++ b/hw/net/i82596.c @@ -1092,6 +1092,7 @@ static ssize_t i82596_receive_packet(I82596State *s, const uint8_t *buf, rx_status |= RFD_STATUS_TRUNC | RFD_STATUS_NOBUFS; i82596_record_error(s, RFD_STATUS_NOBUFS, false); packet_completed = true; + break; } else { hwaddr remaining_rbd = I596_NULL; size_t rbd_bytes = i82596_rx_copy_to_rbds( @@ -1118,17 +1119,18 @@ static ssize_t i82596_receive_packet(I82596State *s, const uint8_t *buf, i82596_record_error(s, RFD_STATUS_NOBUFS, false); rx_status |= RFD_STATUS_TRUNC | RFD_STATUS_NOBUFS; packet_completed = true; + break; } if (bytes_copied < payload_size) { trace_i82596_rx_incomplete(bytes_copied, payload_size); rx_status |= RFD_STATUS_TRUNC; packet_completed = true; + break; } } } } - break; } while (bytes_copied < payload_size); -- 2.49.0
