mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Linux 4.19-rc3+ compat: Remove refcount_t compat
torvalds/linux@59b57717f ("blkcg: delay blkg destruction until after writeback has finished") added a refcount_t to the blkcg structure. Due to the refcount_t compatibility code, zfs_refcount_t was used by mistake. Resolve this by removing the compatibility code and replacing the occurrences of refcount_t with zfs_refcount_t. Reviewed-by: Franz Pletz <fpletz@fnordicwalking.de> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tim Schumacher <timschumi@gmx.de> Closes #7885 Closes #7932
This commit is contained in:
committed by
Brian Behlendorf
parent
7a23c81342
commit
c13060e478
@@ -297,9 +297,6 @@ lseek_execute(
|
||||
* This is several orders of magnitude larger than expected grace period.
|
||||
* At 60 seconds the kernel will also begin issuing RCU stall warnings.
|
||||
*/
|
||||
#ifdef refcount_t
|
||||
#undef refcount_t
|
||||
#endif
|
||||
|
||||
#include <linux/posix_acl.h>
|
||||
|
||||
@@ -430,8 +427,6 @@ typedef mode_t zpl_equivmode_t;
|
||||
#define zpl_posix_acl_valid(ip, acl) posix_acl_valid(acl)
|
||||
#endif
|
||||
|
||||
#define refcount_t zfs_refcount_t
|
||||
|
||||
#endif /* CONFIG_FS_POSIX_ACL */
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ typedef struct abd {
|
||||
abd_flags_t abd_flags;
|
||||
uint_t abd_size; /* excludes scattered abd_offset */
|
||||
struct abd *abd_parent;
|
||||
refcount_t abd_children;
|
||||
zfs_refcount_t abd_children;
|
||||
union {
|
||||
struct abd_scatter {
|
||||
uint_t abd_offset;
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ struct arc_prune {
|
||||
void *p_private;
|
||||
uint64_t p_adjust;
|
||||
list_node_t p_node;
|
||||
refcount_t p_refcnt;
|
||||
zfs_refcount_t p_refcnt;
|
||||
};
|
||||
|
||||
typedef enum arc_strategy {
|
||||
|
||||
@@ -75,12 +75,12 @@ typedef struct arc_state {
|
||||
/*
|
||||
* total amount of evictable data in this state
|
||||
*/
|
||||
refcount_t arcs_esize[ARC_BUFC_NUMTYPES];
|
||||
zfs_refcount_t arcs_esize[ARC_BUFC_NUMTYPES];
|
||||
/*
|
||||
* total amount of data in this state; this includes: evictable,
|
||||
* non-evictable, ARC_BUFC_DATA, and ARC_BUFC_METADATA.
|
||||
*/
|
||||
refcount_t arcs_size;
|
||||
zfs_refcount_t arcs_size;
|
||||
/*
|
||||
* supports the "dbufs" kstat
|
||||
*/
|
||||
@@ -168,7 +168,7 @@ typedef struct l1arc_buf_hdr {
|
||||
uint32_t b_l2_hits;
|
||||
|
||||
/* self protecting */
|
||||
refcount_t b_refcnt;
|
||||
zfs_refcount_t b_refcnt;
|
||||
|
||||
arc_callback_t *b_acb;
|
||||
abd_t *b_pabd;
|
||||
@@ -215,7 +215,7 @@ typedef struct l2arc_dev {
|
||||
kmutex_t l2ad_mtx; /* lock for buffer list */
|
||||
list_t l2ad_buflist; /* buffer list */
|
||||
list_node_t l2ad_node; /* device list node */
|
||||
refcount_t l2ad_alloc; /* allocated bytes */
|
||||
zfs_refcount_t l2ad_alloc; /* allocated bytes */
|
||||
} l2arc_dev_t;
|
||||
|
||||
typedef struct l2arc_buf_hdr {
|
||||
|
||||
+1
-1
@@ -230,7 +230,7 @@ typedef struct dmu_buf_impl {
|
||||
* If nonzero, the buffer can't be destroyed.
|
||||
* Protected by db_mtx.
|
||||
*/
|
||||
refcount_t db_holds;
|
||||
zfs_refcount_t db_holds;
|
||||
|
||||
/* buffer holding our data */
|
||||
arc_buf_t *db_buf;
|
||||
|
||||
@@ -97,8 +97,8 @@ typedef struct dmu_tx_hold {
|
||||
dmu_tx_t *txh_tx;
|
||||
list_node_t txh_node;
|
||||
struct dnode *txh_dnode;
|
||||
refcount_t txh_space_towrite;
|
||||
refcount_t txh_memory_tohold;
|
||||
zfs_refcount_t txh_space_towrite;
|
||||
zfs_refcount_t txh_memory_tohold;
|
||||
enum dmu_tx_hold_type txh_type;
|
||||
uint64_t txh_arg1;
|
||||
uint64_t txh_arg2;
|
||||
|
||||
+2
-2
@@ -335,8 +335,8 @@ struct dnode {
|
||||
uint8_t *dn_dirtyctx_firstset; /* dbg: contents meaningless */
|
||||
|
||||
/* protected by own devices */
|
||||
refcount_t dn_tx_holds;
|
||||
refcount_t dn_holds;
|
||||
zfs_refcount_t dn_tx_holds;
|
||||
zfs_refcount_t dn_holds;
|
||||
|
||||
kmutex_t dn_dbufs_mtx;
|
||||
/*
|
||||
|
||||
@@ -62,7 +62,7 @@ typedef struct dsl_wrapping_key {
|
||||
crypto_key_t wk_key;
|
||||
|
||||
/* refcount of number of dsl_crypto_key_t's holding this struct */
|
||||
refcount_t wk_refcnt;
|
||||
zfs_refcount_t wk_refcnt;
|
||||
|
||||
/* dsl directory object that owns this wrapping key */
|
||||
uint64_t wk_ddobj;
|
||||
@@ -112,7 +112,7 @@ typedef struct dsl_crypto_key {
|
||||
avl_node_t dck_avl_link;
|
||||
|
||||
/* refcount of dsl_key_mapping_t's holding this key */
|
||||
refcount_t dck_holds;
|
||||
zfs_refcount_t dck_holds;
|
||||
|
||||
/* master key used to derive encryption keys */
|
||||
zio_crypt_key_t dck_key;
|
||||
@@ -134,7 +134,7 @@ typedef struct dsl_key_mapping {
|
||||
avl_node_t km_avl_link;
|
||||
|
||||
/* refcount of how many users are depending on this mapping */
|
||||
refcount_t km_refcnt;
|
||||
zfs_refcount_t km_refcnt;
|
||||
|
||||
/* dataset this crypto key belongs to (index) */
|
||||
uint64_t km_dsobj;
|
||||
|
||||
@@ -211,7 +211,7 @@ typedef struct dsl_dataset {
|
||||
* Owning counts as a long hold. See the comments above
|
||||
* dsl_pool_hold() for details.
|
||||
*/
|
||||
refcount_t ds_longholds;
|
||||
zfs_refcount_t ds_longholds;
|
||||
|
||||
/* no locking; only for making guesses */
|
||||
uint64_t ds_trysnap_txg;
|
||||
|
||||
@@ -184,7 +184,7 @@ struct metaslab_class {
|
||||
* number of allocations allowed.
|
||||
*/
|
||||
uint64_t *mc_alloc_max_slots;
|
||||
refcount_t *mc_alloc_slots;
|
||||
zfs_refcount_t *mc_alloc_slots;
|
||||
|
||||
uint64_t mc_alloc_groups; /* # of allocatable groups */
|
||||
|
||||
@@ -256,7 +256,7 @@ struct metaslab_group {
|
||||
*/
|
||||
uint64_t mg_max_alloc_queue_depth;
|
||||
uint64_t *mg_cur_max_alloc_queue_depth;
|
||||
refcount_t *mg_alloc_queue_depth;
|
||||
zfs_refcount_t *mg_alloc_queue_depth;
|
||||
int mg_allocators;
|
||||
/*
|
||||
* A metalab group that can no longer allocate the minimum block
|
||||
|
||||
+22
-28
@@ -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,23 +58,28 @@ typedef struct refcount {
|
||||
uint64_t rc_removed_count;
|
||||
} zfs_refcount_t;
|
||||
|
||||
/* Note: refcount_t must be initialized with refcount_create[_untracked]() */
|
||||
/*
|
||||
* Note: zfs_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_create(zfs_refcount_t *rc);
|
||||
void refcount_create_untracked(zfs_refcount_t *rc);
|
||||
void refcount_create_tracked(zfs_refcount_t *rc);
|
||||
void refcount_destroy(zfs_refcount_t *rc);
|
||||
void refcount_destroy_many(zfs_refcount_t *rc, uint64_t number);
|
||||
int refcount_is_zero(zfs_refcount_t *rc);
|
||||
int64_t refcount_count(zfs_refcount_t *rc);
|
||||
int64_t zfs_refcount_add(zfs_refcount_t *rc, void *holder_tag);
|
||||
int64_t refcount_remove(zfs_refcount_t *rc, void *holder_tag);
|
||||
int64_t refcount_add_many(zfs_refcount_t *rc, uint64_t number,
|
||||
void *holder_tag);
|
||||
int64_t refcount_remove_many(zfs_refcount_t *rc, uint64_t number,
|
||||
void *holder_tag);
|
||||
void refcount_transfer(zfs_refcount_t *dst, zfs_refcount_t *src);
|
||||
void refcount_transfer_ownership(zfs_refcount_t *, void *, void *);
|
||||
boolean_t refcount_held(zfs_refcount_t *, void *);
|
||||
boolean_t refcount_not_held(zfs_refcount_t *, void *);
|
||||
|
||||
void refcount_init(void);
|
||||
void refcount_fini(void);
|
||||
@@ -94,7 +88,7 @@ void refcount_fini(void);
|
||||
|
||||
typedef struct refcount {
|
||||
uint64_t rc_count;
|
||||
} refcount_t;
|
||||
} zfs_refcount_t;
|
||||
|
||||
#define refcount_create(rc) ((rc)->rc_count = 0)
|
||||
#define refcount_create_untracked(rc) ((rc)->rc_count = 0)
|
||||
|
||||
@@ -57,8 +57,8 @@ typedef struct rrwlock {
|
||||
kmutex_t rr_lock;
|
||||
kcondvar_t rr_cv;
|
||||
kthread_t *rr_writer;
|
||||
refcount_t rr_anon_rcount;
|
||||
refcount_t rr_linked_rcount;
|
||||
zfs_refcount_t rr_anon_rcount;
|
||||
zfs_refcount_t rr_linked_rcount;
|
||||
boolean_t rr_writer_wanted;
|
||||
boolean_t rr_track_all;
|
||||
} rrwlock_t;
|
||||
|
||||
@@ -110,7 +110,7 @@ typedef struct sa_idx_tab {
|
||||
list_node_t sa_next;
|
||||
sa_lot_t *sa_layout;
|
||||
uint16_t *sa_variable_lengths;
|
||||
refcount_t sa_refcount;
|
||||
zfs_refcount_t sa_refcount;
|
||||
uint32_t *sa_idx_tab; /* array of offsets */
|
||||
} sa_idx_tab_t;
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ typedef struct spa_config_lock {
|
||||
kthread_t *scl_writer;
|
||||
int scl_write_wanted;
|
||||
kcondvar_t scl_cv;
|
||||
refcount_t scl_count;
|
||||
zfs_refcount_t scl_count;
|
||||
} spa_config_lock_t;
|
||||
|
||||
typedef struct spa_config_dirent {
|
||||
@@ -387,12 +387,12 @@ struct spa {
|
||||
|
||||
/*
|
||||
* spa_refcount & spa_config_lock must be the last elements
|
||||
* because refcount_t changes size based on compilation options.
|
||||
* because zfs_refcount_t changes size based on compilation options.
|
||||
* In order for the MDB module to function correctly, the other
|
||||
* fields must remain in the same location.
|
||||
*/
|
||||
spa_config_lock_t spa_config_lock[SCL_LOCKS]; /* config changes */
|
||||
refcount_t spa_refcount; /* number of opens */
|
||||
zfs_refcount_t spa_refcount; /* number of opens */
|
||||
|
||||
taskq_t *spa_upgrade_taskq; /* taskq for upgrade jobs */
|
||||
};
|
||||
|
||||
+1
-1
@@ -226,7 +226,7 @@ int zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
|
||||
boolean_t *ncp);
|
||||
|
||||
int zap_count_write_by_dnode(dnode_t *dn, const char *name,
|
||||
int add, refcount_t *towrite, refcount_t *tooverwrite);
|
||||
int add, zfs_refcount_t *towrite, zfs_refcount_t *tooverwrite);
|
||||
|
||||
/*
|
||||
* Create an attribute with the given name and value.
|
||||
|
||||
@@ -223,7 +223,7 @@ typedef struct znode_hold {
|
||||
uint64_t zh_obj; /* object id */
|
||||
kmutex_t zh_lock; /* lock serializing object access */
|
||||
avl_node_t zh_node; /* avl tree linkage */
|
||||
refcount_t zh_refcount; /* active consumer reference count */
|
||||
zfs_refcount_t zh_refcount; /* active consumer reference count */
|
||||
} znode_hold_t;
|
||||
|
||||
static inline uint64_t
|
||||
|
||||
Reference in New Issue
Block a user