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


  70 int64_t refcount_remove(refcount_t *rc, void *holder_tag);
  71 int64_t refcount_add_many(refcount_t *rc, uint64_t number, void *holder_tag);
  72 int64_t refcount_remove_many(refcount_t *rc, uint64_t number, void *holder_tag);
  73 void refcount_transfer(refcount_t *dst, refcount_t *src);
  74 
  75 void refcount_init(void);
  76 void refcount_fini(void);
  77 
  78 #else   /* ZFS_DEBUG */
  79 
  80 typedef struct refcount {
  81         uint64_t rc_count;
  82 } refcount_t;
  83 
  84 #define refcount_create(rc) ((rc)->rc_count = 0)
  85 #define refcount_create_untracked(rc) ((rc)->rc_count = 0)
  86 #define refcount_destroy(rc) ((rc)->rc_count = 0)
  87 #define refcount_destroy_many(rc, number) ((rc)->rc_count = 0)
  88 #define refcount_is_zero(rc) ((rc)->rc_count == 0)
  89 #define refcount_count(rc) ((rc)->rc_count)
  90 #define refcount_add(rc, holder) atomic_add_64_nv(&(rc)->rc_count, 1)
  91 #define refcount_remove(rc, holder) atomic_add_64_nv(&(rc)->rc_count, -1)
  92 #define refcount_add_many(rc, number, holder) \
  93         atomic_add_64_nv(&(rc)->rc_count, number)
  94 #define refcount_remove_many(rc, number, holder) \
  95         atomic_add_64_nv(&(rc)->rc_count, -number)
  96 #define refcount_transfer(dst, src) { \
  97         uint64_t __tmp = (src)->rc_count; \
  98         atomic_add_64(&(src)->rc_count, -__tmp); \
  99         atomic_add_64(&(dst)->rc_count, __tmp); \
 100 }
 101 
 102 #define refcount_init()
 103 #define refcount_fini()
 104 
 105 #endif  /* ZFS_DEBUG */
 106 
 107 #ifdef  __cplusplus
 108 }
 109 #endif
 110 
 111 #endif /* _SYS_REFCOUNT_H */


  70 int64_t refcount_remove(refcount_t *rc, void *holder_tag);
  71 int64_t refcount_add_many(refcount_t *rc, uint64_t number, void *holder_tag);
  72 int64_t refcount_remove_many(refcount_t *rc, uint64_t number, void *holder_tag);
  73 void refcount_transfer(refcount_t *dst, refcount_t *src);
  74 
  75 void refcount_init(void);
  76 void refcount_fini(void);
  77 
  78 #else   /* ZFS_DEBUG */
  79 
  80 typedef struct refcount {
  81         uint64_t rc_count;
  82 } refcount_t;
  83 
  84 #define refcount_create(rc) ((rc)->rc_count = 0)
  85 #define refcount_create_untracked(rc) ((rc)->rc_count = 0)
  86 #define refcount_destroy(rc) ((rc)->rc_count = 0)
  87 #define refcount_destroy_many(rc, number) ((rc)->rc_count = 0)
  88 #define refcount_is_zero(rc) ((rc)->rc_count == 0)
  89 #define refcount_count(rc) ((rc)->rc_count)
  90 #define refcount_add(rc, holder) atomic_inc_64_nv(&(rc)->rc_count)
  91 #define refcount_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count)
  92 #define refcount_add_many(rc, number, holder) \
  93         atomic_add_64_nv(&(rc)->rc_count, number)
  94 #define refcount_remove_many(rc, number, holder) \
  95         atomic_add_64_nv(&(rc)->rc_count, -number)
  96 #define refcount_transfer(dst, src) { \
  97         uint64_t __tmp = (src)->rc_count; \
  98         atomic_add_64(&(src)->rc_count, -__tmp); \
  99         atomic_add_64(&(dst)->rc_count, __tmp); \
 100 }
 101 
 102 #define refcount_init()
 103 #define refcount_fini()
 104 
 105 #endif  /* ZFS_DEBUG */
 106 
 107 #ifdef  __cplusplus
 108 }
 109 #endif
 110 
 111 #endif /* _SYS_REFCOUNT_H */