On 2025-07-09 14:47:56, Vincent Whitchurch via B4 Relay wrote: > I noticed that if the verdict callback returns SK_PASS, using splice(2) > to read from a socket in a sockmap does not work since it never sees the > data queued on to it. As far as I can see, this is not a regression but > just something that has never worked, but it does make sockmap unusable > if you can't guarantee that the programs using the socket will not use > splice(2). Correct it was never supported. > > This series attempts to fix it and add a test for it. Thanks I had this todo on my list, but never got to it. > > --- > Changes in v3: > - Rebase on latest bpf-next/master > - Link to v2: https://lore.kernel.org/r/20250609-sockmap-splice-v2-0-9c50645cfa32@xxxxxxxxxxxxx > > Changes in v2: > - Rebase on latest bpf-next/master > - Remove unnecessary change in inet_dgram_ops > - Remove ->splice_read NULL check in inet_splice_read() > - Use INDIRECT_CALL_1() in inet_splice_read() > - Include test case in default test suite in test_sockmap > - Link to v1: https://lore.kernel.org/r/20240606-sockmap-splice-v1-0-4820a2ab14b5@xxxxxxxxxxxxx > > --- > Vincent Whitchurch (5): > net: Add splice_read to prot > tcp_bpf: Fix reading with splice(2) > selftests/bpf: sockmap: Exit with error on failure > selftests/bpf: sockmap: Allow SK_PASS in verdict > selftests/bpf: sockmap: Add splice + SK_PASS regression test > > include/net/inet_common.h | 3 + > include/net/sock.h | 3 + > net/ipv4/af_inet.c | 13 ++++- > net/ipv4/tcp_bpf.c | 9 +++ > net/ipv4/tcp_ipv4.c | 1 + > net/ipv6/af_inet6.c | 2 +- > net/ipv6/tcp_ipv6.c | 1 + > tools/testing/selftests/bpf/test_sockmap.c | 90 +++++++++++++++++++++++++++++- > 8 files changed, 118 insertions(+), 4 deletions(-) > --- > base-commit: ad97cb2ed06a6ba9025fd8bd14fa24369550cbb5 > change-id: 20240606-sockmap-splice-d371ac07d7b4 > > Best regards, > -- > Vincent Whitchurch <vincent.whitchurch@xxxxxxxxxxxxx> > >