tcp: fix a RACK socket buffer lock issue

Fix a missing socket buffer unlocking of the socket receive buffer.

Reviewed by:		gallatin, rrs
MFC after:		1 week
Sponsored by:		Netflix, Inc.
Differential Revision:	https://reviews.freebsd.org/D30402
This commit is contained in:
Michael Tuexen 2021-05-24 20:31:23 +02:00
parent 631449d5d0
commit 9bbd1a8fcb

View File

@ -6063,7 +6063,7 @@ rack_clone_rsm(struct tcp_rack *rack, struct rack_sendmap *nrsm,
/* Push bit must go to the right edge as well */ /* Push bit must go to the right edge as well */
if (rsm->r_flags & RACK_HAD_PUSH) if (rsm->r_flags & RACK_HAD_PUSH)
rsm->r_flags &= ~RACK_HAD_PUSH; rsm->r_flags &= ~RACK_HAD_PUSH;
/* /*
* Now we need to find nrsm's new location in the mbuf chain * Now we need to find nrsm's new location in the mbuf chain
* we basically calculate a new offset, which is soff + * we basically calculate a new offset, which is soff +
@ -10482,6 +10482,7 @@ rack_do_fastnewdata(struct mbuf *m, struct tcphdr *th, struct socket *so,
rack_handle_delayed_ack(tp, rack, tlen, 0); rack_handle_delayed_ack(tp, rack, tlen, 0);
if (tp->snd_una == tp->snd_max) if (tp->snd_una == tp->snd_max)
sack_filter_clear(&rack->r_ctl.rack_sf, tp->snd_una); sack_filter_clear(&rack->r_ctl.rack_sf, tp->snd_una);
tcp_handle_wakeup(tp, so);
return (1); return (1);
} }