rwlock(9) and mutex(9) definitions

From: Gleb Smirnoff <glebius_at_freebsd.org>
Date: Wed, 27 Oct 2021 01:52:21 UTC
  Hi,

[To: list constructed with help of git blame]

despite manual pages describe locking functions as voids in
reality some of them (not all) are preprocessor defines wrapped
in "do {} while (0)".

Such wraps don't really behave as a true void. For example you
can not tail call them:

void
smartass_lock(lock, clue)
{
	if (clue)
		return (rw_rlock(lock));
	else
		return (rw_wlock(lock));
}

This will fail on rw_wlock, but not on rw_rlock. However, if you
have WITNESS it will compile correctly :)

So, we need either make these function "static inline void" in
mtx.h and rwlock.h, or wrap them in __extension__ ({ }). Btw, the
latter is already done for mtx_trylock_spin() by kib in 90b581f2cc327.
Of course for try-lock functions inability of tail call is a bigger
issue then for voids. However, voids should be fixed as well, I believe.

Your call? "static inline" or "__extension__ ({ })"?

-- 
Gleb Smirnoff