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:
parent
631449d5d0
commit
9bbd1a8fcb
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user