--- linux-2.6.22.14/net/core/skbuff.c 2008-01-22 13:57:03.000000000 +0200 +++ linux/net/core/skbuff.c 2008-01-15 10:57:03.000000000 +0200 @@ -158,6 +158,10 @@ struct sk_buff *__alloc_skb(unsigned int if (!skb) goto out; +#ifdef CONFIG_MIPS_MIKROTIK + gfp_mask |= __GFP_DMA; +#endif + size = SKB_DATA_ALIGN(size); data = kmalloc_node_track_caller(size + sizeof(struct skb_shared_info), gfp_mask, node); @@ -419,12 +423,19 @@ struct sk_buff *skb_clone(struct sk_buff C(pkt_type); C(ip_summed); C(priority); + C(ingress_priority); #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) C(ipvs_property); #endif C(protocol); n->destructor = NULL; C(mark); + C(prmark); + C(hsmark); +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) + C(imq_flags); + C(nf_info); +#endif /*CONFIG_IMQ*/ __nf_copy(n, skb); #ifdef CONFIG_NET_SCHED C(tc_index); @@ -460,6 +471,7 @@ static void copy_skb_header(struct sk_bu new->sk = NULL; new->dev = old->dev; new->priority = old->priority; + new->ingress_priority = old->ingress_priority; new->protocol = old->protocol; new->dst = dst_clone(old->dst); #ifdef CONFIG_INET @@ -481,10 +493,16 @@ static void copy_skb_header(struct sk_bu new->tstamp = old->tstamp; new->destructor = NULL; new->mark = old->mark; + new->prmark = old->prmark; + new->hsmark = old->hsmark; __nf_copy(new, old); #if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE) new->ipvs_property = old->ipvs_property; #endif +#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE) + new->imq_flags = old->imq_flags; + new->nf_info = old->nf_info; +#endif /*CONFIG_IMQ*/ #ifdef CONFIG_NET_SCHED #ifdef CONFIG_NET_CLS_ACT new->tc_verd = old->tc_verd; @@ -638,6 +656,10 @@ int pskb_expand_head(struct sk_buff *skb size = SKB_DATA_ALIGN(size); +#ifdef CONFIG_MIPS_MIKROTIK + gfp_mask |= __GFP_DMA; +#endif + data = kmalloc(size + sizeof(struct skb_shared_info), gfp_mask); if (!data) goto nodata; @@ -1931,6 +1953,7 @@ struct sk_buff *skb_segment(struct sk_bu nskb->dev = skb->dev; nskb->priority = skb->priority; + nskb->ingress_priority = skb->ingress_priority; nskb->protocol = skb->protocol; nskb->dst = dst_clone(skb->dst); memcpy(nskb->cb, skb->cb, sizeof(skb->cb));