mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
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
@ -362,7 +362,7 @@ try_again:
|
||||
if (!skb)
|
||||
return err;
|
||||
|
||||
ulen = skb->len;
|
||||
ulen = udp_skb_len(skb);
|
||||
copied = len;
|
||||
if (copied > ulen - off)
|
||||
copied = ulen - off;
|
||||
@ -379,14 +379,18 @@ try_again:
|
||||
|
||||
if (copied < ulen || peeking ||
|
||||
(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)
|
||||
goto csum_copy_err;
|
||||
}
|
||||
|
||||
if (checksum_valid || skb_csum_unnecessary(skb))
|
||||
err = skb_copy_datagram_msg(skb, off, msg, copied);
|
||||
else {
|
||||
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);
|
||||
} else {
|
||||
err = skb_copy_and_csum_datagram_msg(skb, off, msg);
|
||||
if (err == -EINVAL)
|
||||
goto csum_copy_err;
|
||||
|
Loading…
Reference in New Issue
Block a user