forked from mirrors/linux
		
	ipv6: udp: leverage scratch area helpers
The commit b65ac44674 ("udp: try to avoid 2 cache miss on dequeue")
leveraged the scratched area helpers for UDP v4 but I forgot to
update accordingly the IPv6 code path.
This change extends the scratch area usage to the IPv6 code, synching
the two implementations and giving some performance benefit.
IPv6 is again almost on the same level of IPv4, performance-wide.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
			
			
This commit is contained in:
		
							parent
							
								
									b26bbdae46
								
							
						
					
					
						commit
						67a51780ae
					
				
					 1 changed files with 9 additions and 5 deletions
				
			
		|  | @ -362,7 +362,7 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, | ||||||
| 	if (!skb) | 	if (!skb) | ||||||
| 		return err; | 		return err; | ||||||
| 
 | 
 | ||||||
| 	ulen = skb->len; | 	ulen = udp_skb_len(skb); | ||||||
| 	copied = len; | 	copied = len; | ||||||
| 	if (copied > ulen - off) | 	if (copied > ulen - off) | ||||||
| 		copied = ulen - off; | 		copied = ulen - off; | ||||||
|  | @ -379,14 +379,18 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, | ||||||
| 
 | 
 | ||||||
| 	if (copied < ulen || peeking || | 	if (copied < ulen || peeking || | ||||||
| 	    (is_udplite && UDP_SKB_CB(skb)->partial_cov)) { | 	    (is_udplite && UDP_SKB_CB(skb)->partial_cov)) { | ||||||
| 		checksum_valid = !udp_lib_checksum_complete(skb); | 		checksum_valid = udp_skb_csum_unnecessary(skb) || | ||||||
|  | 				!__udp_lib_checksum_complete(skb); | ||||||
| 		if (!checksum_valid) | 		if (!checksum_valid) | ||||||
| 			goto csum_copy_err; | 			goto csum_copy_err; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (checksum_valid || skb_csum_unnecessary(skb)) | 	if (checksum_valid || udp_skb_csum_unnecessary(skb)) { | ||||||
|  | 		if (udp_skb_is_linear(skb)) | ||||||
|  | 			err = copy_linear_skb(skb, copied, off, &msg->msg_iter); | ||||||
|  | 		else | ||||||
| 			err = skb_copy_datagram_msg(skb, off, msg, copied); | 			err = skb_copy_datagram_msg(skb, off, msg, copied); | ||||||
| 	else { | 	} else { | ||||||
| 		err = skb_copy_and_csum_datagram_msg(skb, off, msg); | 		err = skb_copy_and_csum_datagram_msg(skb, off, msg); | ||||||
| 		if (err == -EINVAL) | 		if (err == -EINVAL) | ||||||
| 			goto csum_copy_err; | 			goto csum_copy_err; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Paolo Abeni
						Paolo Abeni