]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/sys/refcount.h
Add zfs_refcount_transfer_ownership_many()
[mirror_zfs.git] / include / sys / refcount.h
index 02002ec2ffd84b34461971491c7201dddac7dd66..e982faeba0f29031b2f5ad035da40374bd25f783 100644 (file)
@@ -41,17 +41,6 @@ extern "C" {
  */
 #define        FTAG ((char *)(uintptr_t)__func__)
 
-/*
- * Starting with 4.11, torvalds/linux@f405df5, the linux kernel defines a
- * refcount_t type of its own.  The macro below effectively changes references
- * in the ZFS code from refcount_t to zfs_refcount_t at compile time, so that
- * existing code need not be altered, reducing conflicts when landing openZFS
- * patches.
- */
-
-#define        refcount_t      zfs_refcount_t
-#define        refcount_add    zfs_refcount_add
-
 #ifdef ZFS_DEBUG
 typedef struct reference {
        list_node_t ref_link;
@@ -69,57 +58,63 @@ typedef struct refcount {
        uint64_t rc_removed_count;
 } zfs_refcount_t;
 
-/* Note: refcount_t must be initialized with refcount_create[_untracked]() */
-
-void refcount_create(refcount_t *rc);
-void refcount_create_untracked(refcount_t *rc);
-void refcount_create_tracked(refcount_t *rc);
-void refcount_destroy(refcount_t *rc);
-void refcount_destroy_many(refcount_t *rc, uint64_t number);
-int refcount_is_zero(refcount_t *rc);
-int64_t refcount_count(refcount_t *rc);
-int64_t zfs_refcount_add(refcount_t *rc, void *holder_tag);
-int64_t refcount_remove(refcount_t *rc, void *holder_tag);
-int64_t refcount_add_many(refcount_t *rc, uint64_t number, void *holder_tag);
-int64_t refcount_remove_many(refcount_t *rc, uint64_t number, void *holder_tag);
-void refcount_transfer(refcount_t *dst, refcount_t *src);
-void refcount_transfer_ownership(refcount_t *, void *, void *);
-boolean_t refcount_held(refcount_t *, void *);
-boolean_t refcount_not_held(refcount_t *, void *);
-
-void refcount_init(void);
-void refcount_fini(void);
+/*
+ * Note: zfs_refcount_t must be initialized with
+ * refcount_create[_untracked]()
+ */
+
+void zfs_refcount_create(zfs_refcount_t *);
+void zfs_refcount_create_untracked(zfs_refcount_t *);
+void zfs_refcount_create_tracked(zfs_refcount_t *);
+void zfs_refcount_destroy(zfs_refcount_t *);
+void zfs_refcount_destroy_many(zfs_refcount_t *, uint64_t);
+int zfs_refcount_is_zero(zfs_refcount_t *);
+int64_t zfs_refcount_count(zfs_refcount_t *);
+int64_t zfs_refcount_add(zfs_refcount_t *, void *);
+int64_t zfs_refcount_remove(zfs_refcount_t *, void *);
+int64_t zfs_refcount_add_many(zfs_refcount_t *, uint64_t, void *);
+int64_t zfs_refcount_remove_many(zfs_refcount_t *, uint64_t, void *);
+void zfs_refcount_transfer(zfs_refcount_t *, zfs_refcount_t *);
+void zfs_refcount_transfer_ownership(zfs_refcount_t *, void *, void *);
+void zfs_refcount_transfer_ownership_many(zfs_refcount_t *, uint64_t,
+    void *, void *);
+boolean_t zfs_refcount_held(zfs_refcount_t *, void *);
+boolean_t zfs_refcount_not_held(zfs_refcount_t *, void *);
+
+void zfs_refcount_init(void);
+void zfs_refcount_fini(void);
 
 #else  /* ZFS_DEBUG */
 
 typedef struct refcount {
        uint64_t rc_count;
-} refcount_t;
-
-#define        refcount_create(rc) ((rc)->rc_count = 0)
-#define        refcount_create_untracked(rc) ((rc)->rc_count = 0)
-#define        refcount_create_tracked(rc) ((rc)->rc_count = 0)
-#define        refcount_destroy(rc) ((rc)->rc_count = 0)
-#define        refcount_destroy_many(rc, number) ((rc)->rc_count = 0)
-#define        refcount_is_zero(rc) ((rc)->rc_count == 0)
-#define        refcount_count(rc) ((rc)->rc_count)
+} zfs_refcount_t;
+
+#define        zfs_refcount_create(rc) ((rc)->rc_count = 0)
+#define        zfs_refcount_create_untracked(rc) ((rc)->rc_count = 0)
+#define        zfs_refcount_create_tracked(rc) ((rc)->rc_count = 0)
+#define        zfs_refcount_destroy(rc) ((rc)->rc_count = 0)
+#define        zfs_refcount_destroy_many(rc, number) ((rc)->rc_count = 0)
+#define        zfs_refcount_is_zero(rc) ((rc)->rc_count == 0)
+#define        zfs_refcount_count(rc) ((rc)->rc_count)
 #define        zfs_refcount_add(rc, holder) atomic_inc_64_nv(&(rc)->rc_count)
-#define        refcount_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count)
-#define        refcount_add_many(rc, number, holder) \
+#define        zfs_refcount_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count)
+#define        zfs_refcount_add_many(rc, number, holder) \
        atomic_add_64_nv(&(rc)->rc_count, number)
-#define        refcount_remove_many(rc, number, holder) \
+#define        zfs_refcount_remove_many(rc, number, holder) \
        atomic_add_64_nv(&(rc)->rc_count, -number)
-#define        refcount_transfer(dst, src) { \
+#define        zfs_refcount_transfer(dst, src) { \
        uint64_t __tmp = (src)->rc_count; \
        atomic_add_64(&(src)->rc_count, -__tmp); \
        atomic_add_64(&(dst)->rc_count, __tmp); \
 }
-#define        refcount_transfer_ownership(rc, current_holder, new_holder)     (void)0
-#define        refcount_held(rc, holder)               ((rc)->rc_count > 0)
-#define        refcount_not_held(rc, holder)           (B_TRUE)
+#define        zfs_refcount_transfer_ownership(rc, ch, nh)             ((void)0)
+#define        zfs_refcount_transfer_ownership_many(rc, nr, ch, nh)    ((void)0)
+#define        zfs_refcount_held(rc, holder)                   ((rc)->rc_count > 0)
+#define        zfs_refcount_not_held(rc, holder)               (B_TRUE)
 
-#define        refcount_init()
-#define        refcount_fini()
+#define        zfs_refcount_init()
+#define        zfs_refcount_fini()
 
 #endif /* ZFS_DEBUG */