Page MenuHomeFreeBSD

D29058.diff
No OneTemporary

D29058.diff

diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -510,6 +510,7 @@
}
/* XXXLAS: EXIT_RECOVERY ? */
tp->t_bytes_acked = 0;
+ tp->sackhint.prr_out = 0;
}
/*
@@ -2595,17 +2596,14 @@
imax(1, tp->snd_nxt - tp->snd_una);
snd_cnt = howmany((long)tp->sackhint.prr_delivered *
tp->snd_ssthresh, tp->sackhint.recover_fs) -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover));
+ tp->sackhint.prr_out;
} else {
if (V_tcp_do_prr_conservative)
limit = tp->sackhint.prr_delivered -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover));
+ tp->sackhint.prr_out;
else
limit = imax(tp->sackhint.prr_delivered -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover)),
+ tp->sackhint.prr_out,
del_data) + maxseg;
snd_cnt = imin(tp->snd_ssthresh - pipe, limit);
}
@@ -3972,18 +3970,15 @@
imax(1, tp->snd_nxt - tp->snd_una);
snd_cnt = howmany((long)tp->sackhint.prr_delivered *
tp->snd_ssthresh, tp->sackhint.recover_fs) -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover));
+ tp->sackhint.prr_out;
} else {
if (V_tcp_do_prr_conservative)
limit = tp->sackhint.prr_delivered -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover));
+ tp->sackhint.prr_out;
else
limit = imax(tp->sackhint.prr_delivered -
- (tp->sackhint.sack_bytes_rexmit +
- (tp->snd_nxt - tp->snd_recover)),
- del_data) + maxseg;
+ tp->sackhint.prr_out, del_data) +
+ maxseg;
snd_cnt = imin((tp->snd_ssthresh - pipe), limit);
}
snd_cnt = imax(snd_cnt, 0) / maxseg;
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1236,6 +1236,14 @@
p->rxmit += len;
tp->sackhint.sack_bytes_rexmit += len;
}
+ if (IN_RECOVERY(tp->t_flags)) {
+ /*
+ * Account all bytes transmitted while
+ * IN_RECOVERY, simplifying PRR and
+ * Lost Retransmit Detection
+ */
+ tp->sackhint.prr_out += len;
+ }
th->th_ack = htonl(tp->rcv_nxt);
if (optlen) {
bcopy(opt, th + 1, optlen);
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -115,7 +115,7 @@
*/
uint32_t recover_fs; /* Flight Size at the start of Loss recovery */
uint32_t prr_delivered; /* Total bytes delivered using PRR */
- uint32_t _pad[1]; /* TBD */
+ uint32_t prr_out; /* Bytes sent during IN_RECOVERY */
};
#define SEGQ_EMPTY(tp) TAILQ_EMPTY(&(tp)->t_segq)

File Metadata

Mime Type
text/plain
Expires
Sun, Sep 6, 5:17 AM (17 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38349675
Default Alt Text
D29058.diff (2 KB)

Event Timeline