MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rack_peer_reneges

Function rack_peer_reneges

freebsd/netinet/tcp_stacks/rack.c:7363–7396  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7361}
7362
7363static void inline
7364rack_peer_reneges(struct tcp_rack *rack, struct rack_sendmap *rsm, tcp_seq th_ack)
7365{
7366 struct rack_sendmap *tmap;
7367
7368 tmap = NULL;
7369 while (rsm && (rsm->r_flags & RACK_ACKED)) {
7370 /* Its no longer sacked, mark it so */
7371 rack->r_ctl.rc_sacked -= (rsm->r_end - rsm->r_start);
7372#ifdef INVARIANTS
7373 if (rsm->r_in_tmap) {
7374 panic("rack:%p rsm:%p flags:0x%x in tmap?",
7375 rack, rsm, rsm->r_flags);
7376 }
7377#endif
7378 rsm->r_flags &= ~(RACK_ACKED|RACK_SACK_PASSED|RACK_WAS_SACKPASS);
7379 /* Rebuild it into our tmap */
7380 if (tmap == NULL) {
7381 TAILQ_INSERT_HEAD(&rack->r_ctl.rc_tmap, rsm, r_tnext);
7382 tmap = rsm;
7383 } else {
7384 TAILQ_INSERT_AFTER(&rack->r_ctl.rc_tmap, tmap, rsm, r_tnext);
7385 tmap = rsm;
7386 }
7387 tmap->r_in_tmap = 1;
7388 rsm = RB_NEXT(rack_rb_tree_head, &rack->r_ctl.rc_mtree, rsm);
7389 }
7390 /*
7391 * Now lets possibly clear the sack filter so we start
7392 * recognizing sacks that cover this area.
7393 */
7394 sack_filter_clear(&rack->r_ctl.rack_sf, th_ack);
7395
7396}
7397
7398static void
7399rack_do_decay(struct tcp_rack *rack)

Callers 1

rack_log_ackFunction · 0.85

Calls 2

sack_filter_clearFunction · 0.85
panicFunction · 0.50

Tested by

no test coverage detected