]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Linux 4.11 compat: avoid refcount_t name conflict
authorOlaf Faaland <faaland1@llnl.gov>
Wed, 1 Mar 2017 00:10:18 +0000 (16:10 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 1 Mar 2017 00:10:18 +0000 (16:10 -0800)
Linux 4.11 introduces a new type, refcount_t, which conflicts with the
type of the same name defined within ZFS.

Rename the ZFS type zfs_refcount_t.  Within the ZFS code, use a macro to
cause references to refcount_t to be changed to zfs_refcount_t at
compile time.  This reduces conflicts when later landing OpenZFS
patches.

Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Olaf Faaland <faaland1@llnl.gov>
Closes #5823
Closes #5842

include/sys/refcount.h
module/zfs/refcount.c

index 3f50cddb6f5114af8d0342adcb499c1ab4a0a1d0..a96220b29ad05974e49f5a622e42c64810f824fb 100644 (file)
@@ -41,6 +41,17 @@ extern "C" {
  */
 #define        FTAG ((char *)__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;
@@ -56,7 +67,7 @@ typedef struct refcount {
        list_t rc_removed;
        uint64_t rc_count;
        uint64_t rc_removed_count;
-} refcount_t;
+} zfs_refcount_t;
 
 /* Note: refcount_t must be initialized with refcount_create[_untracked]() */
 
@@ -67,7 +78,7 @@ 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 refcount_add(refcount_t *rc, void *holder_tag);
+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);
@@ -92,7 +103,7 @@ typedef struct refcount {
 #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)
-#define        refcount_add(rc, holder) atomic_inc_64_nv(&(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) \
        atomic_add_64_nv(&(rc)->rc_count, number)
index b33874714dc15279a6c2e72d17447c2267863a9b..a151aceaecfbd2a0b47d524d0e6a1dbb5453e4f6 100644 (file)
@@ -143,7 +143,7 @@ refcount_add_many(refcount_t *rc, uint64_t number, void *holder)
 }
 
 int64_t
-refcount_add(refcount_t *rc, void *holder)
+zfs_refcount_add(refcount_t *rc, void *holder)
 {
        return (refcount_add_many(rc, 1, holder));
 }