git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
net: skb->dst accessors
[pandora-kernel.git]
/
net
/
atm
/
clip.c
diff --git
a/net/atm/clip.c
b/net/atm/clip.c
index
3dc0a3a
..
e65a3b1
100644
(file)
--- a/
net/atm/clip.c
+++ b/
net/atm/clip.c
@@
-369,16
+369,16
@@
static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
unsigned long flags;
pr_debug("clip_start_xmit (skb %p)\n", skb);
unsigned long flags;
pr_debug("clip_start_xmit (skb %p)\n", skb);
- if (!skb
->dst
) {
- printk(KERN_ERR "clip_start_xmit: skb
->dst
== NULL\n");
+ if (!skb
_dst(skb)
) {
+ printk(KERN_ERR "clip_start_xmit: skb
_dst(skb)
== NULL\n");
dev_kfree_skb(skb);
dev->stats.tx_dropped++;
return 0;
}
dev_kfree_skb(skb);
dev->stats.tx_dropped++;
return 0;
}
- if (!skb
->dst
->neighbour) {
+ if (!skb
_dst(skb)
->neighbour) {
#if 0
#if 0
- skb
->dst->neighbour = clip_find_neighbour(skb->dst
, 1);
- if (!skb
->dst
->neighbour) {
+ skb
_dst(skb)->neighbour = clip_find_neighbour(skb_dst(skb)
, 1);
+ if (!skb
_dst(skb)
->neighbour) {
dev_kfree_skb(skb); /* lost that one */
dev->stats.tx_dropped++;
return 0;
dev_kfree_skb(skb); /* lost that one */
dev->stats.tx_dropped++;
return 0;
@@
-389,7
+389,7
@@
static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
dev->stats.tx_dropped++;
return 0;
}
dev->stats.tx_dropped++;
return 0;
}
- entry = NEIGH2ENTRY(skb
->dst
->neighbour);
+ entry = NEIGH2ENTRY(skb
_dst(skb)
->neighbour);
if (!entry->vccs) {
if (time_after(jiffies, entry->expires)) {
/* should be resolved */
if (!entry->vccs) {
if (time_after(jiffies, entry->expires)) {
/* should be resolved */
@@
-406,7
+406,7
@@
static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
}
pr_debug("neigh %p, vccs %p\n", entry, entry->vccs);
ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc;
}
pr_debug("neigh %p, vccs %p\n", entry, entry->vccs);
ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc;
- pr_debug("using neighbour %p, vcc %p\n", skb
->dst
->neighbour, vcc);
+ pr_debug("using neighbour %p, vcc %p\n", skb
_dst(skb)
->neighbour, vcc);
if (entry->vccs->encap) {
void *here;
if (entry->vccs->encap) {
void *here;
@@
-445,9
+445,9
@@
static int clip_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int clip_mkip(struct atm_vcc *vcc, int timeout)
{
static int clip_mkip(struct atm_vcc *vcc, int timeout)
{
+ struct sk_buff_head *rq, queue;
struct clip_vcc *clip_vcc;
struct clip_vcc *clip_vcc;
- struct sk_buff *skb;
- struct sk_buff_head *rq;
+ struct sk_buff *skb, *tmp;
unsigned long flags;
if (!vcc->push)
unsigned long flags;
if (!vcc->push)
@@
-469,39
+469,28
@@
static int clip_mkip(struct atm_vcc *vcc, int timeout)
vcc->push = clip_push;
vcc->pop = clip_pop;
vcc->push = clip_push;
vcc->pop = clip_pop;
+ __skb_queue_head_init(&queue);
rq = &sk_atm(vcc)->sk_receive_queue;
spin_lock_irqsave(&rq->lock, flags);
rq = &sk_atm(vcc)->sk_receive_queue;
spin_lock_irqsave(&rq->lock, flags);
- if (skb_queue_empty(rq)) {
- skb = NULL;
- } else {
- /* NULL terminate the list. */
- rq->prev->next = NULL;
- skb = rq->next;
- }
- rq->prev = rq->next = (struct sk_buff *)rq;
- rq->qlen = 0;
+ skb_queue_splice_init(rq, &queue);
spin_unlock_irqrestore(&rq->lock, flags);
/* re-process everything received between connection setup and MKIP */
spin_unlock_irqrestore(&rq->lock, flags);
/* re-process everything received between connection setup and MKIP */
- while (skb) {
- struct sk_buff *next = skb->next;
-
- skb->next = skb->prev = NULL;
+ skb_queue_walk_safe(&queue, skb, tmp) {
if (!clip_devs) {
atm_return(vcc, skb->truesize);
kfree_skb(skb);
} else {
if (!clip_devs) {
atm_return(vcc, skb->truesize);
kfree_skb(skb);
} else {
+ struct net_device *dev = skb->dev;
unsigned int len = skb->len;
skb_get(skb);
clip_push(vcc, skb);
unsigned int len = skb->len;
skb_get(skb);
clip_push(vcc, skb);
-
skb->
dev->stats.rx_packets--;
-
skb->
dev->stats.rx_bytes -= len;
+ dev->stats.rx_packets--;
+ dev->stats.rx_bytes -= len;
kfree_skb(skb);
}
kfree_skb(skb);
}
-
- skb = next;
}
return 0;
}
}
return 0;
}
@@
-568,6
+557,7
@@
static void clip_setup(struct net_device *dev)
/* without any more elaborate queuing. 100 is a reasonable */
/* compromise between decent burst-tolerance and protection */
/* against memory hogs. */
/* without any more elaborate queuing. 100 is a reasonable */
/* compromise between decent burst-tolerance and protection */
/* against memory hogs. */
+ dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
}
static int clip_create(int number)
}
static int clip_create(int number)