Skip to content

Commit

Permalink
neigh: Remove by-hand SKB queue handling.
Browse files Browse the repository at this point in the history
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Sep 23, 2008
1 parent f4ab543 commit f72051b
Showing 1 changed file with 8 additions and 13 deletions.
21 changes: 8 additions & 13 deletions net/core/neighbour.c
Original file line number Diff line number Diff line change
Expand Up @@ -927,8 +927,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
if (skb_queue_len(&neigh->arp_queue) >=
neigh->parms->queue_len) {
struct sk_buff *buff;
buff = neigh->arp_queue.next;
__skb_unlink(buff, &neigh->arp_queue);
buff = __skb_dequeue(&neigh->arp_queue);
kfree_skb(buff);
NEIGH_CACHE_STAT_INC(neigh->tbl, unres_discards);
}
Expand Down Expand Up @@ -1259,24 +1258,20 @@ static void neigh_proxy_process(unsigned long arg)
struct neigh_table *tbl = (struct neigh_table *)arg;
long sched_next = 0;
unsigned long now = jiffies;
struct sk_buff *skb;
struct sk_buff *skb, *n;

spin_lock(&tbl->proxy_queue.lock);

skb = tbl->proxy_queue.next;

while (skb != (struct sk_buff *)&tbl->proxy_queue) {
struct sk_buff *back = skb;
long tdif = NEIGH_CB(back)->sched_next - now;
skb_queue_walk_safe(&tbl->proxy_queue, skb, n) {
long tdif = NEIGH_CB(skb)->sched_next - now;

skb = skb->next;
if (tdif <= 0) {
struct net_device *dev = back->dev;
__skb_unlink(back, &tbl->proxy_queue);
struct net_device *dev = skb->dev;
__skb_unlink(skb, &tbl->proxy_queue);
if (tbl->proxy_redo && netif_running(dev))
tbl->proxy_redo(back);
tbl->proxy_redo(skb);
else
kfree_skb(back);
kfree_skb(skb);

dev_put(dev);
} else if (!sched_next || tdif < sched_next)
Expand Down

0 comments on commit f72051b

Please sign in to comment.