Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_output.c
Show First 20 Lines • Show All 1,675 Lines • ▼ Show 20 Lines | if (((tp->t_flags & TF_FORCEDATA) == 0 || | ||||
!tcp_timer_active(tp, TT_PERSIST)) && | !tcp_timer_active(tp, TT_PERSIST)) && | ||||
((flags & TH_SYN) == 0) && | ((flags & TH_SYN) == 0) && | ||||
(error != EPERM)) { | (error != EPERM)) { | ||||
if (sack_rxmit) { | if (sack_rxmit) { | ||||
p->rxmit -= len; | p->rxmit -= len; | ||||
tp->sackhint.sack_bytes_rexmit -= len; | tp->sackhint.sack_bytes_rexmit -= len; | ||||
KASSERT(tp->sackhint.sack_bytes_rexmit >= 0, | KASSERT(tp->sackhint.sack_bytes_rexmit >= 0, | ||||
("sackhint bytes rtx >= 0")); | ("sackhint bytes rtx >= 0")); | ||||
} else | KASSERT((flags & TH_FIN) == 0, | ||||
("error while FIN with SACK rxmit")); | |||||
} else { | |||||
tp->snd_nxt -= len; | tp->snd_nxt -= len; | ||||
if (flags & TH_FIN) | |||||
tp->snd_nxt--; | |||||
} | |||||
} | } | ||||
SOCKBUF_UNLOCK_ASSERT(&so->so_snd); /* Check gotos. */ | SOCKBUF_UNLOCK_ASSERT(&so->so_snd); /* Check gotos. */ | ||||
switch (error) { | switch (error) { | ||||
case EACCES: | case EACCES: | ||||
case EPERM: | case EPERM: | ||||
tp->t_softerror = error; | tp->t_softerror = error; | ||||
return (error); | return (error); | ||||
case ENOBUFS: | case ENOBUFS: | ||||
▲ Show 20 Lines • Show All 485 Lines • Show Last 20 Lines |