diff options
author | Olaf Faaland <[email protected]> | 2017-02-28 16:10:18 -0800 |
---|---|---|
committer | Tony Hutter <[email protected]> | 2017-06-09 14:05:15 -0700 |
commit | 626ba3142ba82055e776313f2a3cb9299d96cbb6 (patch) | |
tree | 22082baf1eac167ddbe46442a1f4b503890dc754 | |
parent | 0bbd80c05842614cd612e9be7fbdf9cc51f035f2 (diff) |
Linux 4.11 compat: avoid refcount_t name conflict
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 <[email protected]>
Reviewed-by: Giuseppe Di Natale <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Olaf Faaland <[email protected]>
Closes #5823
Closes #5842
-rw-r--r-- | include/sys/refcount.h | 17 | ||||
-rw-r--r-- | module/zfs/refcount.c | 2 |
2 files changed, 15 insertions, 4 deletions
diff --git a/include/sys/refcount.h b/include/sys/refcount.h index e767a2389..1d74187d4 100644 --- a/include/sys/refcount.h +++ b/include/sys/refcount.h @@ -40,6 +40,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; @@ -55,7 +66,7 @@ typedef struct refcount { list_t rc_removed; int64_t rc_count; int64_t rc_removed_count; -} refcount_t; +} zfs_refcount_t; /* Note: refcount_t must be initialized with refcount_create[_untracked]() */ @@ -65,7 +76,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); @@ -86,7 +97,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_add_64_nv(&(rc)->rc_count, 1) +#define zfs_refcount_add(rc, holder) atomic_add_64_nv(&(rc)->rc_count, 1) #define refcount_remove(rc, holder) atomic_add_64_nv(&(rc)->rc_count, -1) #define refcount_add_many(rc, number, holder) \ atomic_add_64_nv(&(rc)->rc_count, number) diff --git a/module/zfs/refcount.c b/module/zfs/refcount.c index 4c460a200..25875243b 100644 --- a/module/zfs/refcount.c +++ b/module/zfs/refcount.c @@ -137,7 +137,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)); } |