forked from mirrors/linux
		
	udp: be less conservative with sock rmem accounting
Before commit850cbaddb5("udp: use it's own memory accounting schema"), the udp protocol allowed sk_rmem_alloc to grow beyond the rcvbuf by the whole current packet's truesize. After said commit we allow sk_rmem_alloc to exceed the rcvbuf only if the receive queue is empty. As reported by Jesper this cause a performance regression for some (small) values of rcvbuf. This commit is intended to fix the regression restoring the old handling of the rcvbuf limit. Reported-by: Jesper Dangaard Brouer <brouer@redhat.com> Fixes:850cbaddb5("udp: use it's own memory accounting schema") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									12efa1fa43
								
							
						
					
					
						commit
						363dc73aca
					
				
					 1 changed files with 2 additions and 2 deletions
				
			
		|  | @ -1205,14 +1205,14 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb) | ||||||
| 	 * queue is full; always allow at least a packet | 	 * queue is full; always allow at least a packet | ||||||
| 	 */ | 	 */ | ||||||
| 	rmem = atomic_read(&sk->sk_rmem_alloc); | 	rmem = atomic_read(&sk->sk_rmem_alloc); | ||||||
| 	if (rmem && (rmem + size > sk->sk_rcvbuf)) | 	if (rmem > sk->sk_rcvbuf) | ||||||
| 		goto drop; | 		goto drop; | ||||||
| 
 | 
 | ||||||
| 	/* we drop only if the receive buf is full and the receive
 | 	/* we drop only if the receive buf is full and the receive
 | ||||||
| 	 * queue contains some other skb | 	 * queue contains some other skb | ||||||
| 	 */ | 	 */ | ||||||
| 	rmem = atomic_add_return(size, &sk->sk_rmem_alloc); | 	rmem = atomic_add_return(size, &sk->sk_rmem_alloc); | ||||||
| 	if ((rmem > sk->sk_rcvbuf) && (rmem > size)) | 	if (rmem > (size + sk->sk_rcvbuf)) | ||||||
| 		goto uncharge_drop; | 		goto uncharge_drop; | ||||||
| 
 | 
 | ||||||
| 	spin_lock(&list->lock); | 	spin_lock(&list->lock); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Paolo Abeni
						Paolo Abeni