Commit 90caf67b authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net_sched: sch_fq: remove dead code dealing with retransmits

With the earliest departure time model, we no longer plan
special casing TCP retransmits. We therefore remove dead
code (since most compilers understood skb_is_retransmit()
was false)
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c092dd5f
...@@ -106,7 +106,6 @@ struct fq_sched_data { ...@@ -106,7 +106,6 @@ struct fq_sched_data {
u64 stat_gc_flows; u64 stat_gc_flows;
u64 stat_internal_packets; u64 stat_internal_packets;
u64 stat_tcp_retrans;
u64 stat_throttled; u64 stat_throttled;
u64 stat_flows_plimit; u64 stat_flows_plimit;
u64 stat_pkts_too_long; u64 stat_pkts_too_long;
...@@ -327,62 +326,17 @@ static struct sk_buff *fq_dequeue_head(struct Qdisc *sch, struct fq_flow *flow) ...@@ -327,62 +326,17 @@ static struct sk_buff *fq_dequeue_head(struct Qdisc *sch, struct fq_flow *flow)
return skb; return skb;
} }
/* We might add in the future detection of retransmits
* For the time being, just return false
*/
static bool skb_is_retransmit(struct sk_buff *skb)
{
return false;
}
/* add skb to flow queue
* flow queue is a linked list, kind of FIFO, except for TCP retransmits
* We special case tcp retransmits to be transmitted before other packets.
* We rely on fact that TCP retransmits are unlikely, so we do not waste
* a separate queue or a pointer.
* head-> [retrans pkt 1]
* [retrans pkt 2]
* [ normal pkt 1]
* [ normal pkt 2]
* [ normal pkt 3]
* tail-> [ normal pkt 4]
*/
static void flow_queue_add(struct fq_flow *flow, struct sk_buff *skb) static void flow_queue_add(struct fq_flow *flow, struct sk_buff *skb)
{ {
struct sk_buff *prev, *head = flow->head; struct sk_buff *head = flow->head;
skb->next = NULL; skb->next = NULL;
if (!head) { if (!head)
flow->head = skb; flow->head = skb;
flow->tail = skb; else
return;
}
if (likely(!skb_is_retransmit(skb))) {
flow->tail->next = skb; flow->tail->next = skb;
flow->tail = skb;
return;
}
/* This skb is a tcp retransmit,
* find the last retrans packet in the queue
*/
prev = NULL;
while (skb_is_retransmit(head)) {
prev = head;
head = head->next;
if (!head)
break;
}
if (!prev) { /* no rtx packet in queue, become the new head */
skb->next = flow->head;
flow->head = skb;
} else {
if (prev == flow->tail)
flow->tail = skb; flow->tail = skb;
else
skb->next = prev->next;
prev->next = skb;
}
} }
static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch, static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch,
...@@ -401,8 +355,6 @@ static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch, ...@@ -401,8 +355,6 @@ static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch,
} }
f->qlen++; f->qlen++;
if (skb_is_retransmit(skb))
q->stat_tcp_retrans++;
qdisc_qstats_backlog_inc(sch, skb); qdisc_qstats_backlog_inc(sch, skb);
if (fq_flow_is_detached(f)) { if (fq_flow_is_detached(f)) {
struct sock *sk = skb->sk; struct sock *sk = skb->sk;
...@@ -874,7 +826,7 @@ static int fq_dump_stats(struct Qdisc *sch, struct gnet_dump *d) ...@@ -874,7 +826,7 @@ static int fq_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
st.gc_flows = q->stat_gc_flows; st.gc_flows = q->stat_gc_flows;
st.highprio_packets = q->stat_internal_packets; st.highprio_packets = q->stat_internal_packets;
st.tcp_retrans = q->stat_tcp_retrans; st.tcp_retrans = 0;
st.throttled = q->stat_throttled; st.throttled = q->stat_throttled;
st.flows_plimit = q->stat_flows_plimit; st.flows_plimit = q->stat_flows_plimit;
st.pkts_too_long = q->stat_pkts_too_long; st.pkts_too_long = q->stat_pkts_too_long;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment