HomeFreeBSD

Don't require the socket lock for sorele().

Description

Don't require the socket lock for sorele().

Previously, sorele() always required the socket lock and dropped the
lock if the released reference was not the last reference. Many
callers locked the socket lock just before calling sorele() resulting
in a wasted lock/unlock when not dropping the last reference.

Move the previous implementation of sorele() into a new
sorele_locked() function and use it instead of sorele() for various
places in uipc_socket.c that called sorele() while already holding the
socket lock.

The sorele() macro now uses refcount_release_if_not_last() try to drop
the socket reference without locking the socket. If that shortcut
fails, it locks the socket and calls sorele_locked().

Reviewed by: kib, markj
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D32741

Details

Provenance
jhbAuthored on Nov 9 2021, 6:50 PM
Reviewer
kib
Differential Revision
D32741: Don't require the socket lock for sorele().
Parents
rGe818178e3a59: tests: do not build ktls_test if WITHOUT_OPENSSL
Branches
Unknown
Tags
Unknown