Frank Pavlic <[EMAIL PROTECTED]> wrote:

>[PATCH 6/9] s390: qeth driver fixes [3/6]
>
>From: Frank Pavlic <[EMAIL PROTECTED]>
>               fixed kernel panic caused by qeth driver:
>        Using a bonding device qeth driver will realloc
>        headroom for every skb coming from the bond device.
>        Once this happens qeth frees the original skb and
>        set the skb pointer to the new realloced skb.

        Frank, does the following patch to bonding (to track larger than
usual hard_header_len) resolve this problem without changing qeth?  I
believe this patch is queued for 2.6.19.

To: netdev@vger.kernel.org, [EMAIL PROTECTED]
Cc: Jeff Garzik <[EMAIL PROTECTED]>
Subject: [PATCH 5/7] bonding: Handle large hard_header_len
X-Mailer: MH-E 7.83; nmh 1.1-RC4; GNU Emacs 21.4.1
Date: Fri, 01 Sep 2006 15:12:44 -0700
From: Jay Vosburgh <[EMAIL PROTECTED]>


The bonding driver fails to adjust its hard_header_len when enslaving
interfaces.  Whenever an interface with a hard_header_len greater than the
ETH_HLEN default is enslaved, the potential for an oops exists, and if the
oops happens while responding to an arp request, for example, the system
panics.  GIANFAR devices may use an extended hard_header for VLAN or
hardware checksumming.  Enslaving such a device and then transmitting over
it causes a kernel panic.

Patch modified from submitter's original, but submitter agreed with this
patch in private email.

Signed-off-by: Mark Huth <[EMAIL PROTECTED]>
Signed-off-by: Jay Vosburgh <[EMAIL PROTECTED]>


--- netdev-2.6.git-upstream/drivers/net/bonding/bond_main.c     2006/08/19 
14:46:07     1.3
+++ netdev-2.6.git-upstream/drivers/net/bonding/bond_main.c     2006/08/19 
15:47:27     1.4
@@ -1211,10 +1211,14 @@ static int bond_compute_features(struct 
        unsigned long features = BOND_INTERSECT_FEATURES;
        struct slave *slave;
        struct net_device *bond_dev = bond->dev;
+       unsigned short max_hard_header_len = ETH_HLEN;
        int i;
 
-       bond_for_each_slave(bond, slave, i)
+       bond_for_each_slave(bond, slave, i) {
                features &= (slave->dev->features & BOND_INTERSECT_FEATURES);
+               if (slave->dev->hard_header_len > max_hard_header_len)
+                       max_hard_header_len = slave->dev->hard_header_len;
+       }
 
        if ((features & NETIF_F_SG) && 
            !(features & NETIF_F_ALL_CSUM))
@@ -1232,6 +1236,7 @@ static int bond_compute_features(struct 
 
        features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES);
        bond_dev->features = features;
+       bond_dev->hard_header_len = max_hard_header_len;
 
        return 0;
 }



        -J

---
        -Jay Vosburgh, IBM Linux Technology Center, [EMAIL PROTECTED]
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to