diff options
author | Stephen Rothwell <sfr@canb.auug.org.au> | 2011-07-25 13:59:46 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-07-25 14:53:52 -0400 |
commit | 5f00bcb38ef9a980a33c6dbdc0044964b05f22dd (patch) | |
tree | 3175fb9375aecb50bde1be0bf4fa8aa8155131d6 /net/atm/clip.c | |
parent | 34006cee28f7344f9557a4be3816c7891b1bbab1 (diff) | |
parent | b6844e8f64920cdee620157252169ba63afb0c89 (diff) |
Merge branch 'master' into devel and apply fixup from Stephen Rothwell:
vfs/nfs: fixup for nfs_open_context change
Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'net/atm/clip.c')
-rw-r--r-- | net/atm/clip.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/net/atm/clip.c b/net/atm/clip.c index 1d4be60e1390..4bc8c67ecb14 100644 --- a/net/atm/clip.c +++ b/net/atm/clip.c | |||
@@ -271,10 +271,8 @@ static const struct neigh_ops clip_neigh_ops = { | |||
271 | .family = AF_INET, | 271 | .family = AF_INET, |
272 | .solicit = clip_neigh_solicit, | 272 | .solicit = clip_neigh_solicit, |
273 | .error_report = clip_neigh_error, | 273 | .error_report = clip_neigh_error, |
274 | .output = dev_queue_xmit, | 274 | .output = neigh_direct_output, |
275 | .connected_output = dev_queue_xmit, | 275 | .connected_output = neigh_direct_output, |
276 | .hh_output = dev_queue_xmit, | ||
277 | .queue_xmit = dev_queue_xmit, | ||
278 | }; | 276 | }; |
279 | 277 | ||
280 | static int clip_constructor(struct neighbour *neigh) | 278 | static int clip_constructor(struct neighbour *neigh) |
@@ -364,33 +362,37 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb, | |||
364 | struct net_device *dev) | 362 | struct net_device *dev) |
365 | { | 363 | { |
366 | struct clip_priv *clip_priv = PRIV(dev); | 364 | struct clip_priv *clip_priv = PRIV(dev); |
365 | struct dst_entry *dst = skb_dst(skb); | ||
367 | struct atmarp_entry *entry; | 366 | struct atmarp_entry *entry; |
367 | struct neighbour *n; | ||
368 | struct atm_vcc *vcc; | 368 | struct atm_vcc *vcc; |
369 | int old; | 369 | int old; |
370 | unsigned long flags; | 370 | unsigned long flags; |
371 | 371 | ||
372 | pr_debug("(skb %p)\n", skb); | 372 | pr_debug("(skb %p)\n", skb); |
373 | if (!skb_dst(skb)) { | 373 | if (!dst) { |
374 | pr_err("skb_dst(skb) == NULL\n"); | 374 | pr_err("skb_dst(skb) == NULL\n"); |
375 | dev_kfree_skb(skb); | 375 | dev_kfree_skb(skb); |
376 | dev->stats.tx_dropped++; | 376 | dev->stats.tx_dropped++; |
377 | return NETDEV_TX_OK; | 377 | return NETDEV_TX_OK; |
378 | } | 378 | } |
379 | if (!skb_dst(skb)->neighbour) { | 379 | n = dst_get_neighbour(dst); |
380 | if (!n) { | ||
380 | #if 0 | 381 | #if 0 |
381 | skb_dst(skb)->neighbour = clip_find_neighbour(skb_dst(skb), 1); | 382 | n = clip_find_neighbour(skb_dst(skb), 1); |
382 | if (!skb_dst(skb)->neighbour) { | 383 | if (!n) { |
383 | dev_kfree_skb(skb); /* lost that one */ | 384 | dev_kfree_skb(skb); /* lost that one */ |
384 | dev->stats.tx_dropped++; | 385 | dev->stats.tx_dropped++; |
385 | return 0; | 386 | return 0; |
386 | } | 387 | } |
388 | dst_set_neighbour(dst, n); | ||
387 | #endif | 389 | #endif |
388 | pr_err("NO NEIGHBOUR !\n"); | 390 | pr_err("NO NEIGHBOUR !\n"); |
389 | dev_kfree_skb(skb); | 391 | dev_kfree_skb(skb); |
390 | dev->stats.tx_dropped++; | 392 | dev->stats.tx_dropped++; |
391 | return NETDEV_TX_OK; | 393 | return NETDEV_TX_OK; |
392 | } | 394 | } |
393 | entry = NEIGH2ENTRY(skb_dst(skb)->neighbour); | 395 | entry = NEIGH2ENTRY(n); |
394 | if (!entry->vccs) { | 396 | if (!entry->vccs) { |
395 | if (time_after(jiffies, entry->expires)) { | 397 | if (time_after(jiffies, entry->expires)) { |
396 | /* should be resolved */ | 398 | /* should be resolved */ |
@@ -407,7 +409,7 @@ static netdev_tx_t clip_start_xmit(struct sk_buff *skb, | |||
407 | } | 409 | } |
408 | pr_debug("neigh %p, vccs %p\n", entry, entry->vccs); | 410 | pr_debug("neigh %p, vccs %p\n", entry, entry->vccs); |
409 | ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc; | 411 | ATM_SKB(skb)->vcc = vcc = entry->vccs->vcc; |
410 | pr_debug("using neighbour %p, vcc %p\n", skb_dst(skb)->neighbour, vcc); | 412 | pr_debug("using neighbour %p, vcc %p\n", n, vcc); |
411 | if (entry->vccs->encap) { | 413 | if (entry->vccs->encap) { |
412 | void *here; | 414 | void *here; |
413 | 415 | ||