]> xenbits.xensource.com Git - people/ssmith/nc2-2.6.27.git/commitdiff
Temporary work around to enable LRO packets to be forwarded lro
authorSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 7 Jul 2009 16:50:23 +0000 (17:50 +0100)
committerSteven Smith <ssmith@weybridge.uk.xensource.com>
Tue, 7 Jul 2009 16:50:23 +0000 (17:50 +0100)
by the bridge. This may have been fixed in a different way
on more recent kernel versions as there was some discussion
in the lkml. This should be fixed at some point in the
future. For now it serves the purpose of enabling experiments
with LRO in netchannel2.

Signed-off-by: Jose Renato Santos <jsantos@hpl.hp.com>
net/bridge/br_forward.c
net/bridge/br_if.c
net/core/dev.c

index 94dd648d9638e6e4f1a961e4c583d84d9358d2cd..12b18e3ea3bdcd9f6c55b9f358aafba4c147473e 100644 (file)
@@ -115,7 +115,7 @@ void br_forward(const struct net_bridge_port *to, struct sk_buff *skb)
 {
        __br_promisc(to, skb, __br_deliver);
 
-       if (!skb_warn_if_lro(skb) && should_deliver(to, skb)) {
+       if (should_deliver(to, skb)) {
                __br_forward(to, skb);
                return;
        }
index f530c5b5380081851a47000ac3b908ce01db1d47..4744a58a13d5ab5ed13e3e71ac76a36d754ec5ab 100644 (file)
@@ -523,7 +523,6 @@ int br_add_if(struct net_bridge *br, struct net_device *dev)
                goto err2;
 
        rcu_assign_pointer(dev->br_port, p);
-       dev_disable_lro(dev);
 
        list_add_rcu(&p->list, &br->port_list);
 
index c2e59c5ee25b1db14d9160879af463685970fe2a..7199676c4d9ebe7aef9730f39a78fb3140c6bb8e 100644 (file)
@@ -1514,12 +1514,6 @@ struct sk_buff *skb_gso_segment(struct sk_buff *skb, int features)
        skb->mac_len = skb->network_header - skb->mac_header;
        __skb_pull(skb, skb->mac_len);
 
-       if (WARN_ON(skb->ip_summed != CHECKSUM_PARTIAL)) {
-               if (skb_header_cloned(skb) &&
-                   (err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC)))
-                       return ERR_PTR(err);
-       }
-
        rcu_read_lock();
        list_for_each_entry_rcu(ptype,
                        &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
@@ -1639,6 +1633,11 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
                if (!list_empty(&ptype_all))
                        dev_queue_xmit_nit(skb, dev);
 
+               /* Temporary work around to enable LRO packets to be
+                  sent on a Xen netchannel2 interface */
+               if (skb_shinfo(skb)->frag_list)
+                       return dev->hard_start_xmit(skb, dev);
+               
                if (netif_needs_gso(dev, skb)) {
                        if (unlikely(dev_gso_segment(skb)))
                                goto out_kfree_skb;