net: add rb_to_skb() and other rb tree helpers
Geeralize private netem_rb_to_skb() TCP rtx queue will soon be converted to rb-tree, so we will need skb_rbtree_walk() helpers. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f5333f80c3
commit
18a4c0eab2
@@ -148,12 +148,6 @@ struct netem_skb_cb {
|
||||
psched_time_t time_to_send;
|
||||
};
|
||||
|
||||
|
||||
static struct sk_buff *netem_rb_to_skb(struct rb_node *rb)
|
||||
{
|
||||
return rb_entry(rb, struct sk_buff, rbnode);
|
||||
}
|
||||
|
||||
static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb)
|
||||
{
|
||||
/* we assume we can use skb next/prev/tstamp as storage for rb_node */
|
||||
@@ -364,7 +358,7 @@ static void tfifo_reset(struct Qdisc *sch)
|
||||
struct rb_node *p = rb_first(&q->t_root);
|
||||
|
||||
while (p) {
|
||||
struct sk_buff *skb = netem_rb_to_skb(p);
|
||||
struct sk_buff *skb = rb_to_skb(p);
|
||||
|
||||
p = rb_next(p);
|
||||
rb_erase(&skb->rbnode, &q->t_root);
|
||||
@@ -382,7 +376,7 @@ static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
|
||||
struct sk_buff *skb;
|
||||
|
||||
parent = *p;
|
||||
skb = netem_rb_to_skb(parent);
|
||||
skb = rb_to_skb(parent);
|
||||
if (tnext >= netem_skb_cb(skb)->time_to_send)
|
||||
p = &parent->rb_right;
|
||||
else
|
||||
@@ -538,7 +532,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
struct sk_buff *t_skb;
|
||||
struct netem_skb_cb *t_last;
|
||||
|
||||
t_skb = netem_rb_to_skb(rb_last(&q->t_root));
|
||||
t_skb = skb_rb_last(&q->t_root);
|
||||
t_last = netem_skb_cb(t_skb);
|
||||
if (!last ||
|
||||
t_last->time_to_send > last->time_to_send) {
|
||||
@@ -617,7 +611,7 @@ deliver:
|
||||
if (p) {
|
||||
psched_time_t time_to_send;
|
||||
|
||||
skb = netem_rb_to_skb(p);
|
||||
skb = rb_to_skb(p);
|
||||
|
||||
/* if more time remaining? */
|
||||
time_to_send = netem_skb_cb(skb)->time_to_send;
|
||||
|
Reference in New Issue
Block a user