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