diff options
author | David Howells <dhowells@redhat.com> | 2023-06-09 11:02:21 +0100 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2023-06-12 21:13:23 -0700 |
commit | c31a25e1db486f36a0ffe3c849b0a82cda3db7db (patch) | |
tree | a250249ce571e7b36fb10842b2a098faf2d9cabd /include/net/kcm.h | |
parent | 264ba53fac79b03ff754bce62da5027ee3c57b8f (diff) | |
download | linux-stable-c31a25e1db486f36a0ffe3c849b0a82cda3db7db.tar.gz linux-stable-c31a25e1db486f36a0ffe3c849b0a82cda3db7db.tar.bz2 linux-stable-c31a25e1db486f36a0ffe3c849b0a82cda3db7db.zip |
kcm: Send multiple frags in one sendmsg()
Rewrite the AF_KCM transmission loop to send all the fragments in a single
skb or frag_list-skb in one sendmsg() with MSG_SPLICE_PAGES set. The list
of fragments in each skb is conveniently a bio_vec[] that can just be
attached to a BVEC iter.
Note: I'm working out the size of each fragment-skb by adding up bv_len for
all the bio_vecs in skb->frags[] - but surely this information is recorded
somewhere? For the skbs in head->frag_list, this is equal to
skb->data_len, but not for the head. head->data_len includes all the tail
frags too.
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>
Diffstat (limited to 'include/net/kcm.h')
-rw-r--r-- | include/net/kcm.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/kcm.h b/include/net/kcm.h index 2d704f8f4905..90279e5e09a5 100644 --- a/include/net/kcm.h +++ b/include/net/kcm.h @@ -47,9 +47,9 @@ struct kcm_stats { struct kcm_tx_msg { unsigned int sent; - unsigned int fragidx; unsigned int frag_offset; unsigned int msg_flags; + bool started_tx; struct sk_buff *frag_skb; struct sk_buff *last_skb; }; |