The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=30f30ccae71ce6b3bbe7b2719a3d588cb46f97ba

commit 30f30ccae71ce6b3bbe7b2719a3d588cb46f97ba
Author:     Mark Johnston <[email protected]>
AuthorDate: 2024-07-09 14:33:53 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2024-07-09 14:33:53 +0000

    socket: Simplify synchronization in soreceive_stream()
    
    Now that the socket recv I/O lock is required in order to enable
    receive-side KTLS, we can move a check from out of the socket buffer
    lock, which in turn will simplify some further refactoring.
    
    Add a __predict_false annotation while here since we already perform a
    lockless check before acquiring any locks.
    
    Reviewed by:    gallatin, jhb
    MFC after:      2 weeks
    Sponsored by:   Klara, Inc.
    Sponsored by:   Stormshield
    Differential Revision:  https://reviews.freebsd.org/D45922
---
 sys/kern/uipc_socket.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index f0d22b3887a4..0350a5eb4d87 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -2609,17 +2609,15 @@ soreceive_stream(struct socket *so, struct sockaddr 
**psa, struct uio *uio,
        error = SOCK_IO_RECV_LOCK(so, SBLOCKWAIT(flags));
        if (error)
                return (error);
-       SOCKBUF_LOCK(sb);
-
 #ifdef KERN_TLS
-       if (sb->sb_tls_info != NULL) {
-               SOCKBUF_UNLOCK(sb);
+       if (__predict_false(sb->sb_tls_info != NULL)) {
                SOCK_IO_RECV_UNLOCK(so);
                return (soreceive_generic(so, psa, uio, mp0, controlp,
                    flagsp));
        }
 #endif
 
+       SOCKBUF_LOCK(sb);
        /* Easy one, no space to copyout anything. */
        if (uio->uio_resid == 0) {
                error = EINVAL;

Reply via email to