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