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 <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
This commit is contained in:
parent
912e2ba92f
commit
4859fe796c
|
@ -41,6 +41,17 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define FTAG ((char *)__func__)
|
#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
|
#ifdef ZFS_DEBUG
|
||||||
typedef struct reference {
|
typedef struct reference {
|
||||||
list_node_t ref_link;
|
list_node_t ref_link;
|
||||||
|
@ -56,7 +67,7 @@ typedef struct refcount {
|
||||||
list_t rc_removed;
|
list_t rc_removed;
|
||||||
uint64_t rc_count;
|
uint64_t rc_count;
|
||||||
uint64_t rc_removed_count;
|
uint64_t rc_removed_count;
|
||||||
} refcount_t;
|
} zfs_refcount_t;
|
||||||
|
|
||||||
/* Note: refcount_t must be initialized with refcount_create[_untracked]() */
|
/* 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);
|
void refcount_destroy_many(refcount_t *rc, uint64_t number);
|
||||||
int refcount_is_zero(refcount_t *rc);
|
int refcount_is_zero(refcount_t *rc);
|
||||||
int64_t refcount_count(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_remove(refcount_t *rc, void *holder_tag);
|
||||||
int64_t refcount_add_many(refcount_t *rc, uint64_t number, 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);
|
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_destroy_many(rc, number) ((rc)->rc_count = 0)
|
||||||
#define refcount_is_zero(rc) ((rc)->rc_count == 0)
|
#define refcount_is_zero(rc) ((rc)->rc_count == 0)
|
||||||
#define refcount_count(rc) ((rc)->rc_count)
|
#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_remove(rc, holder) atomic_dec_64_nv(&(rc)->rc_count)
|
||||||
#define refcount_add_many(rc, number, holder) \
|
#define refcount_add_many(rc, number, holder) \
|
||||||
atomic_add_64_nv(&(rc)->rc_count, number)
|
atomic_add_64_nv(&(rc)->rc_count, number)
|
||||||
|
|
|
@ -143,7 +143,7 @@ refcount_add_many(refcount_t *rc, uint64_t number, void *holder)
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t
|
int64_t
|
||||||
refcount_add(refcount_t *rc, void *holder)
|
zfs_refcount_add(refcount_t *rc, void *holder)
|
||||||
{
|
{
|
||||||
return (refcount_add_many(rc, 1, holder));
|
return (refcount_add_many(rc, 1, holder));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue