From: Sabrina Dubroca <sd@queasysnail.net>
To: Chuck Lever <cel@kernel.org>
Cc: Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Shuah Khan <shuah@kernel.org>, Jeff Layton <jlayton@kernel.org>,
NeilBrown <neil@brown.name>,
Olga Kornievskaia <okorniev@redhat.com>,
Dai Ngo <Dai.Ngo@oracle.com>, Tom Talpey <tom@talpey.com>,
netdev@vger.kernel.org, kernel-tls-handshake@lists.linux.dev,
linux-kselftest@vger.kernel.org, linux-nfs@vger.kernel.org
Subject: Re: [PATCH net-next v2 2/6] net: Introduce read_sock_rectype proto_ops for control record delivery
Date: Wed, 29 Jul 2026 14:23:13 +0200 [thread overview]
Message-ID: <amnwsWrxv6KvrZ_L@krikkit> (raw)
In-Reply-To: <a6fb364d-8344-408e-bcd5-0cee4ffabdc3@app.fastmail.com>
2026-07-28, 22:51:30 -0400, Chuck Lever wrote:
>
>
> On Tue, Jul 28, 2026, at 10:30 PM, Jakub Kicinski wrote:
> > On Tue, 28 Jul 2026 21:57:21 -0400 Chuck Lever wrote:
> >> > To me this is an ugly one-off workaround that doesn't fit into
> >> > the proto_ops (only TLS will use it). And you seem to net out
> >> > to the same LOC on SUNRPC side with and without this?
> >>
> >> It’s not about LOC. It’s about not cluttering the normal I/O
> >> path with a lot of exception processing to handle TLS Alert
> >> records. The CMSG API is very difficult to use and leaks the
> >> alert messages into I/O buffers (which for in-kernel consumers
> >> are page cache pages). It’s piss-poor API design.
> >
> > I'm not arguing that it's amazing. Doesn't mean we will YOLO
> > a special proto callback for every protocol stacking :/
>
> No-one is asking you to roll over. Review means you get to steer
> us in the right direction, and I promise to do the leg work. Terse
> rejection doesn’t move the discussion forward. It stops it cold.
>
> Complaining about slop also does not tell me where you need this
> to go. I use AI to go from blank page to RFC/v1. Where we go next
> is up to human taste, as always.
RFC/v1 wasn't sent to netdev.
[jumping to the end of your reply]
> I thought the RFC series cover letter made it clear that we are
> looking for input and direction, not to sell a completely formed idea.
Then this should have been tagged as "RFC v2". "PATCH v2" sounds more
like a fully formed idea.
I see in the RFC thread some doubts about whether read_sock is
actually helpful with TLS.
Ignoring the "does read_sock even help?" aspect, how much improvement
are you seeing by going from "read_sock with fallback to recvmsg+cmsg
in case we get a non-DATA record" to "read_sock_rectype"? (current
svcsock [before this series] doesn't use read_sock, it may be good to
compare those 3 variants and not just "old read_sock vs new
read_sock", but "read_sock vs read_sock++" is the important one to
justify an API change)
Non-DATA record should be fairly uncommon, I'm not that convinced "oh
well let's try again" once in a while causes a measurable degradation.
Even with recvmsg(), you have 2 choices:
- pass a cmsg every time, and check the record type for every recv
- don't pass a cmsg, and do a retry when you get -EIO
This proposal (call a different CB depending on record type) is... an
"interesting" approach.
> >> > There needs to be a very strong reason for us to add APIs for
> >> > in kernel consumers.
> >>
> >> This is not a helpful position. Your objection is the same
> >> every time, treating the in-kernel users as second-class
> >> citizens.
> >
> > No, it's not a second class citizen. But kernel consumers have a
> > tendency to break all abstractions and insert hacks all over the place
> > just because they are not forced to go via uAPI boundary which forces
> > people to think about the API design.
>
> Granted that user space self-tests can’t reach kernel-only APIs.
> But that is what Kunit is for.
>
>
> > You just need to try a little harder to produce a better solution.
> > Rework or augment existing callbacks to let your achieve the behavior
> > you want.
>
> My original approach was to add a new read_sock variant because I
> suspected you wouldn’t want read_sock itself to grow another argument.
Given that there's only 2 existing consumers of read_sock (strp and
nvme, and I'm not sure why strp/sockmap use it at all) [1], and 3
arguments to read_sock, adding an argument would be ok IMO. The
implementation (tls_sw_read_sock/tls_sw_read_sock_rectype) ends up
being a small wrapper around a function that does the actual work with
a NULL check, might as well propagate that to the callers.
For me the problem is more that this new argument is very specific to
TLS, and dropping something TLS-specific in a generic API (struct
proto_ops) is quite ugly. If we want to make this generic, we're back
to cmsg (or something cmsg-like). And then the benefit for users of
read_sock gets down to avoiding the "try read_sock, then fall back to
recvmsg" logic.
[1] well, there's also some users that call tcp_read_sock directly
[1], but I think they can be ignored other than "they'll need to pass
NULL since .read_sock = tcp_read_sock"
drivers/infiniband/sw/siw/siw_cm.c tcp_read_sock(sk, &rd_desc, siw_tcp_rx_data);
drivers/infiniband/sw/siw/siw_qp.c tcp_read_sock(sk, &rd_desc, siw_tcp_rx_data);
drivers/scsi/iscsi_tcp.c tcp_read_sock(sk, &rd_desc, iscsi_sw_tcp_recv);
net/rds/tcp_recv.c tcp_read_sock(sock->sk, &desc, rds_tcp_data_recv);
--
Sabrina
next prev parent reply other threads:[~2026-07-29 12:23 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 14:27 [PATCH net-next v2 0/6] Deliver TLS control records to kernel read_sock consumers Chuck Lever
2026-07-20 14:27 ` [PATCH net-next v2 1/6] net/tls: Bound consecutive no-data records in tls_sw_read_sock() Chuck Lever
2026-07-23 7:11 ` Hannes Reinecke
2026-07-23 13:24 ` Chuck Lever
2026-07-23 14:23 ` Sabrina Dubroca
2026-07-23 14:29 ` Chuck Lever
2026-07-23 22:05 ` Sabrina Dubroca
2026-07-29 1:47 ` Jakub Kicinski
2026-07-29 3:17 ` Chuck Lever
2026-07-20 14:27 ` [PATCH net-next v2 2/6] net: Introduce read_sock_rectype proto_ops for control record delivery Chuck Lever
2026-07-23 7:14 ` Hannes Reinecke
2026-07-29 1:51 ` Jakub Kicinski
2026-07-29 1:57 ` Chuck Lever
2026-07-29 2:30 ` Jakub Kicinski
2026-07-29 2:51 ` Chuck Lever
2026-07-29 12:23 ` Sabrina Dubroca [this message]
2026-07-29 13:13 ` Chuck Lever
2026-07-20 14:27 ` [PATCH net-next v2 3/6] tls: Implement read_sock_rectype for kTLS software path Chuck Lever
2026-07-23 7:14 ` Hannes Reinecke
2026-07-20 14:27 ` [PATCH net-next v2 4/6] selftests/tls: Add tests for data/control record interleaving Chuck Lever
2026-07-20 14:27 ` [PATCH net-next v2 5/6] SUNRPC: Use read_sock_rectype for svcsock TCP receives Chuck Lever
2026-07-20 14:28 ` [PATCH net-next v2 6/6] SUNRPC: Remove sock_recvmsg path from " Chuck Lever
2026-07-23 7:19 ` [PATCH net-next v2 0/6] Deliver TLS control records to kernel read_sock consumers Hannes Reinecke
2026-07-29 1:43 ` Jakub Kicinski
2026-07-29 1:46 ` Chuck Lever
2026-07-29 1:55 ` Jakub Kicinski
2026-07-29 2:16 ` Chuck Lever
2026-07-29 2:24 ` Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=amnwsWrxv6KvrZ_L@krikkit \
--to=sd@queasysnail.net \
--cc=Dai.Ngo@oracle.com \
--cc=cel@kernel.org \
--cc=horms@kernel.org \
--cc=jlayton@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kernel-tls-handshake@lists.linux.dev \
--cc=kuba@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=neil@brown.name \
--cc=netdev@vger.kernel.org \
--cc=okorniev@redhat.com \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.