kcm: Use sendmsg(MSG_SPLICE_PAGES) rather then sendpage
When transmitting data, call down into the transport socket using sendmsg with MSG_SPLICE_PAGES to indicate that content should be spliced rather than using sendpage. Signed-off-by: David Howells <dhowells@redhat.com> cc: Tom Herbert <tom@herbertland.com> cc: Tom Herbert <tom@quantonium.net> cc: Jens Axboe <axboe@kernel.dk> cc: Matthew Wilcox <willy@infradead.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
de17c68573
commit
264ba53fac
@ -641,6 +641,10 @@ static int kcm_write_msgs(struct kcm_sock *kcm)
|
||||
|
||||
for (fragidx = 0; fragidx < skb_shinfo(skb)->nr_frags;
|
||||
fragidx++) {
|
||||
struct bio_vec bvec;
|
||||
struct msghdr msg = {
|
||||
.msg_flags = MSG_DONTWAIT | MSG_SPLICE_PAGES,
|
||||
};
|
||||
skb_frag_t *frag;
|
||||
|
||||
frag_offset = 0;
|
||||
@ -651,11 +655,13 @@ static int kcm_write_msgs(struct kcm_sock *kcm)
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = kernel_sendpage(psock->sk->sk_socket,
|
||||
skb_frag_page(frag),
|
||||
skb_frag_off(frag) + frag_offset,
|
||||
skb_frag_size(frag) - frag_offset,
|
||||
MSG_DONTWAIT);
|
||||
bvec_set_page(&bvec,
|
||||
skb_frag_page(frag),
|
||||
skb_frag_size(frag) - frag_offset,
|
||||
skb_frag_off(frag) + frag_offset);
|
||||
iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1,
|
||||
bvec.bv_len);
|
||||
ret = sock_sendmsg(psock->sk->sk_socket, &msg);
|
||||
if (ret <= 0) {
|
||||
if (ret == -EAGAIN) {
|
||||
/* Save state to try again when there's
|
||||
|
Loading…
Reference in New Issue
Block a user