Index: linux/drivers/dahdi/dahdi_dynamic_eth.c =================================================================== --- linux/drivers/dahdi/dahdi_dynamic_eth.c (revision 14419) +++ linux/drivers/dahdi/dahdi_dynamic_eth.c (working copy) @@ -80,6 +80,17 @@ { struct dahdi_span *span; struct ztdeth_header *zh; + /* + * Linearize before trying to extract any data - e.g. the igb network driver can cause a + * crash otherwise + */ +#ifdef NEW_SKB_LINEARIZE + if (skb_is_nonlinear(skb)) + skb_linearize(skb); +#else + if (skb_is_nonlinear(skb)) + skb_linearize(skb, GFP_KERNEL); +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) zh = (struct ztdeth_header *)skb_network_header(skb); #else @@ -88,13 +99,6 @@ span = ztdeth_getspan(eth_hdr(skb)->h_source, zh->subaddr); if (span) { skb_pull(skb, sizeof(struct ztdeth_header)); -#ifdef NEW_SKB_LINEARIZE - if (skb_is_nonlinear(skb)) - skb_linearize(skb); -#else - if (skb_is_nonlinear(skb)) - skb_linearize(skb, GFP_KERNEL); -#endif dahdi_dynamic_receive(span, (unsigned char *)skb->data, skb->len); } kfree_skb(skb); Index: linux/drivers/dahdi/dahdi_dynamic_ethmf.c =================================================================== --- linux/drivers/dahdi/dahdi_dynamic_ethmf.c (revision 14419) +++ linux/drivers/dahdi/dahdi_dynamic_ethmf.c (working copy) @@ -236,6 +236,17 @@ unsigned int samples, channels, rbslen, flags; unsigned int skip = 0; + /* + * Linearize before trying to extract any data - e.g. the igb network driver can cause a + * crash otherwise + */ +#ifdef NEW_SKB_LINEARIZE + if (skb_is_nonlinear(skb)) + skb_linearize(skb); +#else + if (skb_is_nonlinear(skb)) + skb_linearize(skb, GFP_KERNEL); +#endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 22) zh = (struct ztdeth_header *) skb_network_header(skb); #else @@ -252,13 +263,6 @@ } skb_pull(skb, sizeof(struct ztdeth_header)); -#ifdef NEW_SKB_LINEARIZE - if (skb_is_nonlinear(skb)) - skb_linearize(skb); -#else - if (skb_is_nonlinear(skb)) - skb_linearize(skb, GFP_KERNEL); -#endif data = (unsigned char *) skb->data; rcu_read_lock();