diff options
author | David Howells <dhowells@redhat.com> | 2024-01-30 02:47:57 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2024-03-06 02:31:43 +0300 |
commit | 49489bb03a501547450e8fdc6d85d023d8a3b2c4 (patch) | |
tree | 072eb93c5f650cd6e2bf76652359b6c77f5c335f /net/rxrpc/local_object.c | |
parent | 8985f2b09b3303b935b9ab4814d801251f0c7c22 (diff) | |
download | linux-49489bb03a501547450e8fdc6d85d023d8a3b2c4.tar.xz |
rxrpc: Do zerocopy using MSG_SPLICE_PAGES and page frags
Switch from keeping the transmission buffers in the rxrpc_txbuf struct and
allocated from the slab, to allocating them using page fragment allocators
(which uses raw pages), thereby allowing them to be passed to
MSG_SPLICE_PAGES and avoid copying into the UDP buffers.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.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: linux-afs@lists.infradead.org
cc: netdev@vger.kernel.org
Diffstat (limited to 'net/rxrpc/local_object.c')
-rw-r--r-- | net/rxrpc/local_object.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/rxrpc/local_object.c b/net/rxrpc/local_object.c index 34d307368135..504453c688d7 100644 --- a/net/rxrpc/local_object.c +++ b/net/rxrpc/local_object.c @@ -452,6 +452,9 @@ void rxrpc_destroy_local(struct rxrpc_local *local) #endif rxrpc_purge_queue(&local->rx_queue); rxrpc_purge_client_connections(local); + if (local->tx_alloc.va) + __page_frag_cache_drain(virt_to_page(local->tx_alloc.va), + local->tx_alloc.pagecnt_bias); } /* |