diff options
author | David S. Miller <davem@davemloft.net> | 2013-04-22 20:32:51 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-22 20:32:51 -0400 |
commit | 6e0895c2ea326cc4bb11e8fa2f654628d5754c31 (patch) | |
tree | 7089303ac11a12edc43a8c4fa1b23974e10937ea /net/ipv4/ip_fragment.c | |
parent | 55fbbe46e9eb3cbe6c335503f5550855a1128dce (diff) | |
parent | 60d509fa6a9c4653a86ad830e4c4b30360b23f0e (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
drivers/net/ethernet/emulex/benet/be_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
include/net/scm.h
net/batman-adv/routing.c
net/ipv4/tcp_input.c
The e{uid,gid} --> {uid,gid} credentials fix conflicted with the
cleanup in net-next to now pass cred structs around.
The be2net driver had a bug fix in 'net' that overlapped with the VLAN
interface changes by Patrick McHardy in net-next.
An IGB conflict existed because in 'net' the build_skb() support was
reverted, and in 'net-next' there was a comment style fix within that
code.
Several batman-adv conflicts were resolved by making sure that all
calls to batadv_is_my_mac() are changed to have a new bat_priv first
argument.
Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO
rewrite in 'net-next', mostly overlapping changes.
Thanks to Stephen Rothwell and Antonio Quartulli for help with several
of these merge resolutions.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_fragment.c')
-rw-r--r-- | net/ipv4/ip_fragment.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index 938520668b2f..b66910aaef4d 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -219,8 +219,7 @@ static void ip_expire(unsigned long arg) | |||
219 | if (!head->dev) | 219 | if (!head->dev) |
220 | goto out_rcu_unlock; | 220 | goto out_rcu_unlock; |
221 | 221 | ||
222 | /* skb dst is stale, drop it, and perform route lookup again */ | 222 | /* skb has no dst, perform route lookup again */ |
223 | skb_dst_drop(head); | ||
224 | iph = ip_hdr(head); | 223 | iph = ip_hdr(head); |
225 | err = ip_route_input_noref(head, iph->daddr, iph->saddr, | 224 | err = ip_route_input_noref(head, iph->daddr, iph->saddr, |
226 | iph->tos, head->dev); | 225 | iph->tos, head->dev); |
@@ -494,9 +493,16 @@ found: | |||
494 | qp->q.max_size = skb->len + ihl; | 493 | qp->q.max_size = skb->len + ihl; |
495 | 494 | ||
496 | if (qp->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && | 495 | if (qp->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && |
497 | qp->q.meat == qp->q.len) | 496 | qp->q.meat == qp->q.len) { |
498 | return ip_frag_reasm(qp, prev, dev); | 497 | unsigned long orefdst = skb->_skb_refdst; |
499 | 498 | ||
499 | skb->_skb_refdst = 0UL; | ||
500 | err = ip_frag_reasm(qp, prev, dev); | ||
501 | skb->_skb_refdst = orefdst; | ||
502 | return err; | ||
503 | } | ||
504 | |||
505 | skb_dst_drop(skb); | ||
500 | inet_frag_lru_move(&qp->q); | 506 | inet_frag_lru_move(&qp->q); |
501 | return -EINPROGRESS; | 507 | return -EINPROGRESS; |
502 | 508 | ||