svn commit: r341698 - head/sys/kern
Mateusz Guzik
mjg at FreeBSD.org
Fri Dec 7 16:11:47 UTC 2018
Author: mjg
Date: Fri Dec 7 16:11:45 2018
New Revision: 341698
URL: https://svnweb.freebsd.org/changeset/base/341698
Log:
Replace hand-rolled unrefs if > 1 with refcount_release_if_not_last
Sponsored by: The FreeBSD Foundation
Modified:
head/sys/kern/kern_jail.c
head/sys/kern/kern_loginclass.c
head/sys/kern/kern_resource.c
Modified: head/sys/kern/kern_jail.c
==============================================================================
--- head/sys/kern/kern_jail.c Fri Dec 7 16:10:13 2018 (r341697)
+++ head/sys/kern/kern_jail.c Fri Dec 7 16:11:45 2018 (r341698)
@@ -4023,13 +4023,11 @@ prison_racct_free_locked(struct prison_racct *prr)
void
prison_racct_free(struct prison_racct *prr)
{
- int old;
ASSERT_RACCT_ENABLED();
sx_assert(&allprison_lock, SA_UNLOCKED);
- old = prr->prr_refcount;
- if (old > 1 && atomic_cmpset_int(&prr->prr_refcount, old, old - 1))
+ if (refcount_release_if_not_last(&prr->prr_refcount))
return;
sx_xlock(&allprison_lock);
Modified: head/sys/kern/kern_loginclass.c
==============================================================================
--- head/sys/kern/kern_loginclass.c Fri Dec 7 16:10:13 2018 (r341697)
+++ head/sys/kern/kern_loginclass.c Fri Dec 7 16:11:45 2018 (r341698)
@@ -84,10 +84,8 @@ loginclass_hold(struct loginclass *lc)
void
loginclass_free(struct loginclass *lc)
{
- int old;
- old = lc->lc_refcount;
- if (old > 1 && atomic_cmpset_int(&lc->lc_refcount, old, old - 1))
+ if (refcount_release_if_not_last(&lc->lc_refcount))
return;
rw_wlock(&loginclasses_lock);
Modified: head/sys/kern/kern_resource.c
==============================================================================
--- head/sys/kern/kern_resource.c Fri Dec 7 16:10:13 2018 (r341697)
+++ head/sys/kern/kern_resource.c Fri Dec 7 16:11:45 2018 (r341698)
@@ -1323,14 +1323,10 @@ uihold(struct uidinfo *uip)
void
uifree(struct uidinfo *uip)
{
- int old;
- /* Prepare for optimal case. */
- old = uip->ui_ref;
- if (old > 1 && atomic_cmpset_int(&uip->ui_ref, old, old - 1))
+ if (refcount_release_if_not_last(&uip->ui_ref))
return;
- /* Prepare for suboptimal case. */
rw_wlock(&uihashtbl_lock);
if (refcount_release(&uip->ui_ref) == 0) {
rw_wunlock(&uihashtbl_lock);
More information about the svn-src-head
mailing list