--- x/net/ipv4/tcp_input.c +++ y/net/ipv4/tcp_input.c @@ -5514,14 +5514,16 @@ static bool tcp_prune_ofo_queue(struct s prev = rb_prev(node); rb_erase(node, &tp->out_of_order_queue); goal -= skb->truesize; - tcp_drop_reason(sk, skb, SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE); tp->ooo_last_skb = rb_to_skb(prev); if (!prev || goal <= 0) { if (tcp_can_ingest(sk, skb) && - !tcp_under_memory_pressure(sk)) + !tcp_under_memory_pressure(sk)) { + tcp_drop_reason(sk, skb, SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE); break; + } goal = sk->sk_rcvbuf >> 3; } + tcp_drop_reason(sk, skb, SKB_DROP_REASON_TCP_OFO_QUEUE_PRUNE); node = prev; } while (node);