Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 104  * the current reference.
 105  */
 106 ts_label_t *
 107 labeldup(const ts_label_t *val, int flag)
 108 {
 109         ts_label_t *lab = kmem_cache_alloc(tslabel_cache, flag);
 110 
 111         if (lab != NULL) {
 112                 bcopy(val, lab, sizeof (ts_label_t));
 113                 lab->tsl_ref = 1;
 114         }
 115         return (lab);
 116 }
 117 
 118 /*
 119  * Put a hold on a label structure.
 120  */
 121 void
 122 label_hold(ts_label_t *lab)
 123 {
 124         atomic_add_32(&lab->tsl_ref, 1);
 125 }
 126 
 127 /*
 128  * Release previous hold on a label structure.  Free it if refcnt == 0.
 129  */
 130 void
 131 label_rele(ts_label_t *lab)
 132 {
 133         if (atomic_add_32_nv(&lab->tsl_ref, -1) == 0)
 134                 kmem_cache_free(tslabel_cache, lab);
 135 }
 136 
 137 bslabel_t *
 138 label2bslabel(ts_label_t *lab)
 139 {
 140         return (&lab->tsl_label);
 141 }
 142 
 143 
 144 uint32_t
 145 label2doi(ts_label_t *lab)
 146 {
 147         return (lab->tsl_doi);
 148 }
 149 
 150 /*
 151  * Compare labels. Return 1 if equal, 0 otherwise.
 152  */
 153 boolean_t




 104  * the current reference.
 105  */
 106 ts_label_t *
 107 labeldup(const ts_label_t *val, int flag)
 108 {
 109         ts_label_t *lab = kmem_cache_alloc(tslabel_cache, flag);
 110 
 111         if (lab != NULL) {
 112                 bcopy(val, lab, sizeof (ts_label_t));
 113                 lab->tsl_ref = 1;
 114         }
 115         return (lab);
 116 }
 117 
 118 /*
 119  * Put a hold on a label structure.
 120  */
 121 void
 122 label_hold(ts_label_t *lab)
 123 {
 124         atomic_inc_32(&lab->tsl_ref);
 125 }
 126 
 127 /*
 128  * Release previous hold on a label structure.  Free it if refcnt == 0.
 129  */
 130 void
 131 label_rele(ts_label_t *lab)
 132 {
 133         if (atomic_dec_32_nv(&lab->tsl_ref) == 0)
 134                 kmem_cache_free(tslabel_cache, lab);
 135 }
 136 
 137 bslabel_t *
 138 label2bslabel(ts_label_t *lab)
 139 {
 140         return (&lab->tsl_label);
 141 }
 142 
 143 
 144 uint32_t
 145 label2doi(ts_label_t *lab)
 146 {
 147         return (lab->tsl_doi);
 148 }
 149 
 150 /*
 151  * Compare labels. Return 1 if equal, 0 otherwise.
 152  */
 153 boolean_t