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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to