This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / net / ipv4 / ip_output.c
index 8ef2b82..360765a 100644 (file)
@@ -224,9 +224,8 @@ int ip_finish_output(struct sk_buff *skb)
                       ip_finish_output2);
 }
 
-int ip_mc_output(struct sk_buff **pskb)
+int ip_mc_output(struct sk_buff *skb)
 {
-       struct sk_buff *skb = *pskb;
        struct sock *sk = skb->sk;
        struct rtable *rt = (struct rtable*)skb->dst;
        struct net_device *dev = rt->u.dst.dev;
@@ -279,20 +278,17 @@ int ip_mc_output(struct sk_buff **pskb)
                                newskb->dev, ip_dev_loopback_xmit);
        }
 
-       if (skb->len > dst_pmtu(&rt->u.dst) || skb_shinfo(skb)->frag_list)
+       if (skb->len > dst_pmtu(&rt->u.dst))
                return ip_fragment(skb, ip_finish_output);
        else
                return ip_finish_output(skb);
 }
 
-int ip_output(struct sk_buff **pskb)
+int ip_output(struct sk_buff *skb)
 {
-       struct sk_buff *skb = *pskb;
-
        IP_INC_STATS(IPSTATS_MIB_OUTREQUESTS);
 
-       if ((skb->len > dst_pmtu(skb->dst) || skb_shinfo(skb)->frag_list) &&
-           !skb_shinfo(skb)->tso_size)
+       if (skb->len > dst_pmtu(skb->dst) && !skb_shinfo(skb)->tso_size)
                return ip_fragment(skb, ip_finish_output);
        else
                return ip_finish_output(skb);
@@ -393,6 +389,7 @@ static void ip_copy_metadata(struct sk_buff *to, struct sk_buff *from)
        to->priority = from->priority;
        to->protocol = from->protocol;
        to->security = from->security;
+       dst_release(to->dst);
        to->dst = dst_clone(from->dst);
        to->dev = from->dev;