Micro-optimize zrl_remove()

atomic_dec_32() should be a bit lighter than atomic_dec_32_nv().

Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de>
Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Signed-off-by: Alexander Motin <mav@FreeBSD.org>
Closes #14200
This commit is contained in:
Alexander Motin 2022-11-29 12:26:03 -05:00 committed by GitHub
parent e996c502e4
commit f0a76fbec1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -106,16 +106,16 @@ zrl_add_impl(zrlock_t *zrl, const char *zc)
void
zrl_remove(zrlock_t *zrl)
{
uint32_t n;
#ifdef ZFS_DEBUG
if (zrl->zr_owner == curthread) {
zrl->zr_owner = NULL;
zrl->zr_caller = NULL;
}
int32_t n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount);
ASSERT3S(n, >=, 0);
#else
atomic_dec_32((uint32_t *)&zrl->zr_refcount);
#endif
n = atomic_dec_32_nv((uint32_t *)&zrl->zr_refcount);
ASSERT3S((int32_t)n, >=, 0);
}
int