mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-06 00:39:48 +00:00
chelsio: Support MSG_SPLICE_PAGES
Make Chelsio's TLS offload sendmsg() support MSG_SPLICE_PAGES, splicing in pages from the source iterator if possible and copying the data in otherwise. This allows ->sendpage() to be replaced by something that can handle multiple multipage folios in a single transaction. Signed-off-by: David Howells <dhowells@redhat.com> cc: Ayush Sawal <ayush.sawal@chelsio.com> cc: "David S. Miller" <davem@davemloft.net> cc: Eric Dumazet <edumazet@google.com> cc: Jakub Kicinski <kuba@kernel.org> cc: Paolo Abeni <pabeni@redhat.com> cc: Jens Axboe <axboe@kernel.dk> cc: Matthew Wilcox <willy@infradead.org> cc: netdev@vger.kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
735c9ee9a3
commit
116f7b361e
1 changed files with 11 additions and 1 deletions
|
@ -1092,7 +1092,17 @@ int chtls_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)
|
|||
if (copy > size)
|
||||
copy = size;
|
||||
|
||||
if (skb_tailroom(skb) > 0) {
|
||||
if (msg->msg_flags & MSG_SPLICE_PAGES) {
|
||||
err = skb_splice_from_iter(skb, &msg->msg_iter, copy,
|
||||
sk->sk_allocation);
|
||||
if (err < 0) {
|
||||
if (err == -EMSGSIZE)
|
||||
goto new_buf;
|
||||
goto do_fault;
|
||||
}
|
||||
copy = err;
|
||||
sk_wmem_queued_add(sk, copy);
|
||||
} else if (skb_tailroom(skb) > 0) {
|
||||
copy = min(copy, skb_tailroom(skb));
|
||||
if (is_tls_tx(csk))
|
||||
copy = min_t(int, copy, csk->tlshws.txleft);
|
||||
|
|
Loading…
Reference in a new issue