mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	gro: should aggregate frames without DF
GRO on IPv4 doesn't aggregate frames if they don't have DF bit set. Some servers use IP_MTU_DISCOVER/IP_PMTUDISC_PROBE, so linux receivers are unable to aggregate this kind of traffic. The right thing to do is to allow aggregation as long as the DF bit has same value on all segments. bnx2x LRO does this correctly. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Jerry Chu <hkchu@google.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Ben Hutchings <bhutchings@solarflare.com> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									c3f1dbaf6e
								
							
						
					
					
						commit
						db8caf3dbc
					
				
					 1 changed files with 2 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1385,7 +1385,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
 | 
			
		|||
		goto out_unlock;
 | 
			
		||||
 | 
			
		||||
	id = ntohl(*(__be32 *)&iph->id);
 | 
			
		||||
	flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id ^ IP_DF));
 | 
			
		||||
	flush = (u16)((ntohl(*(__be32 *)iph) ^ skb_gro_len(skb)) | (id & ~IP_DF));
 | 
			
		||||
	id >>= 16;
 | 
			
		||||
 | 
			
		||||
	for (p = *head; p; p = p->next) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1407,6 +1407,7 @@ static struct sk_buff **inet_gro_receive(struct sk_buff **head,
 | 
			
		|||
		NAPI_GRO_CB(p)->flush |=
 | 
			
		||||
			(iph->ttl ^ iph2->ttl) |
 | 
			
		||||
			(iph->tos ^ iph2->tos) |
 | 
			
		||||
			((iph->frag_off ^ iph2->frag_off) & htons(IP_DF)) |
 | 
			
		||||
			((u16)(ntohs(iph2->id) + NAPI_GRO_CB(p)->count) ^ id);
 | 
			
		||||
 | 
			
		||||
		NAPI_GRO_CB(p)->flush |= flush;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue