diff options
author | Jakub Kicinski <kuba@kernel.org> | 2022-04-08 11:31:31 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-04-10 17:32:11 +0100 |
commit | ba13609df18dabf1d892a247201bd3fe38012ff9 (patch) | |
tree | 88a75caeecb00e8fc38d0a5aa4e1c598f0fee650 /net/tls | |
parent | 7da18bcc5e4cfd14ea520367546c5697e64ae592 (diff) | |
download | linux-ba13609df18dabf1d892a247201bd3fe38012ff9.tar.gz |
tls: rx: pull most of zc check out of the loop
Most of the conditions deciding if zero-copy can be used
do not change throughout the iterations, so pre-calculate
them.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tls')
-rw-r--r-- | net/tls/tls_sw.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 183e5ec292a8..5ad0b2505988 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -1763,6 +1763,7 @@ int tls_sw_recvmsg(struct sock *sk, bool is_kvec = iov_iter_is_kvec(&msg->msg_iter); bool is_peek = flags & MSG_PEEK; bool bpf_strp_enabled; + bool zc_capable; flags |= nonblock; @@ -1788,6 +1789,8 @@ int tls_sw_recvmsg(struct sock *sk, len = len - copied; timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT); + zc_capable = !bpf_strp_enabled && !is_kvec && !is_peek && + prot->version != TLS_1_3_VERSION; decrypted = 0; while (len && (decrypted + copied < target || ctx->recv_pkt)) { struct tls_decrypt_arg darg = {}; @@ -1814,10 +1817,8 @@ int tls_sw_recvmsg(struct sock *sk, to_decrypt = rxm->full_len - prot->overhead_size; - if (to_decrypt <= len && !is_kvec && !is_peek && - tlm->control == TLS_RECORD_TYPE_DATA && - prot->version != TLS_1_3_VERSION && - !bpf_strp_enabled) + if (zc_capable && to_decrypt <= len && + tlm->control == TLS_RECORD_TYPE_DATA) darg.zc = true; /* Do not use async mode if record is non-data */ |