The bridging device used a constant hard_header_len. This will cause headroom shortage for ports with additional hardware header. The patch makes bridging device to use the maximum value of all ports. Signed-off-by: Li Yang <leoli@xxxxxxxxxxxxx> --- Fixes the following BUG when using bridging with gianfar driver: skb_under_panic: text:c0224b84 len:122 put:8 head:dfb81800 data:dfb817fa tail:0xdfb81874 end:0xdfb818a0 dev:eth1 ------------[ cut here ]------------ Kernel BUG at c02d9444 [verbose debug info unavailable] Oops: Exception in kernel mode, sig: 5 [#1] Call Trace: [df2dbb20] [c02d9444] skb_under_panic+0x48/0x5c (unreliable) [df2dbb30] [c0224b94] gfar_start_xmit+0x384/0x400 [df2dbb60] [c02e1c8c] dev_hard_start_xmit+0x258/0x2cc [df2dbba0] [c02f264c] __qdisc_run+0x5c/0x1f8 [df2dbbd0] [c02e4bf4] dev_queue_xmit+0x264/0x2d0 [df2dbbf0] [c036fdc8] br_dev_queue_push_xmit+0x90/0xf8 [df2dbc00] [c036fcc8] br_flood+0xc8/0x120 [df2dbc30] [c036ebe0] br_dev_xmit+0xbc/0xc0 [df2dbc40] [c02e1c8c] dev_hard_start_xmit+0x258/0x2cc [df2dbc80] [c02e4c04] dev_queue_xmit+0x274/0x2d0 [df2dbca0] [c02ebaa8] neigh_resolve_output+0xfc/0x25c ............ net/bridge/br_if.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 727c5c5..d34303d 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -348,6 +348,7 @@ void br_features_recompute(struct net_bridge *br) { struct net_bridge_port *p; unsigned long features, mask; + unsigned short max_hard_header_len = ETH_HLEN; features = mask = br->feature_mask; if (list_empty(&br->port_list)) @@ -358,7 +359,10 @@ void br_features_recompute(struct net_bridge *br) list_for_each_entry(p, &br->port_list, list) { features = netdev_increment_features(features, p->dev->features, mask); + if (p->dev->hard_header_len > max_hard_header_len) + max_hard_header_len = p->dev->hard_header_len; } + br->dev->hard_header_len = max_hard_header_len; done: br->dev->features = netdev_fix_features(features, NULL); -- 1.5.5.1.248.g4b17 _______________________________________________ Bridge mailing list Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/bridge