@@ -162,8 +162,7 @@ zfs_znode_hold_cache_constructor(void *buf, void *arg, int kmflags)
162
162
znode_hold_t * zh = buf ;
163
163
164
164
mutex_init (& zh -> zh_lock , NULL , MUTEX_DEFAULT , NULL );
165
- zfs_refcount_create (& zh -> zh_refcount );
166
- zh -> zh_obj = ZFS_NO_OBJECT ;
165
+ zh -> zh_refcount = 0 ;
167
166
168
167
return (0 );
169
168
}
@@ -174,7 +173,6 @@ zfs_znode_hold_cache_destructor(void *buf, void *arg)
174
173
znode_hold_t * zh = buf ;
175
174
176
175
mutex_destroy (& zh -> zh_lock );
177
- zfs_refcount_destroy (& zh -> zh_refcount );
178
176
}
179
177
180
178
void
@@ -273,26 +271,26 @@ zfs_znode_hold_enter(zfsvfs_t *zfsvfs, uint64_t obj)
273
271
boolean_t found = B_FALSE ;
274
272
275
273
zh_new = kmem_cache_alloc (znode_hold_cache , KM_SLEEP );
276
- zh_new -> zh_obj = obj ;
277
274
search .zh_obj = obj ;
278
275
279
276
mutex_enter (& zfsvfs -> z_hold_locks [i ]);
280
277
zh = avl_find (& zfsvfs -> z_hold_trees [i ], & search , NULL );
281
278
if (likely (zh == NULL )) {
282
279
zh = zh_new ;
280
+ zh -> zh_obj = obj ;
283
281
avl_add (& zfsvfs -> z_hold_trees [i ], zh );
284
282
} else {
285
283
ASSERT3U (zh -> zh_obj , = = , obj );
286
284
found = B_TRUE ;
287
285
}
288
- zfs_refcount_add (& zh -> zh_refcount , NULL );
286
+ zh -> zh_refcount ++ ;
287
+ ASSERT3S (zh -> zh_refcount , > , 0 );
289
288
mutex_exit (& zfsvfs -> z_hold_locks [i ]);
290
289
291
290
if (found == B_TRUE )
292
291
kmem_cache_free (znode_hold_cache , zh_new );
293
292
294
293
ASSERT (MUTEX_NOT_HELD (& zh -> zh_lock ));
295
- ASSERT3S (zfs_refcount_count (& zh -> zh_refcount ), > , 0 );
296
294
mutex_enter (& zh -> zh_lock );
297
295
298
296
return (zh );
@@ -305,11 +303,11 @@ zfs_znode_hold_exit(zfsvfs_t *zfsvfs, znode_hold_t *zh)
305
303
boolean_t remove = B_FALSE ;
306
304
307
305
ASSERT (zfs_znode_held (zfsvfs , zh -> zh_obj ));
308
- ASSERT3S (zfs_refcount_count (& zh -> zh_refcount ), > , 0 );
309
306
mutex_exit (& zh -> zh_lock );
310
307
311
308
mutex_enter (& zfsvfs -> z_hold_locks [i ]);
312
- if (zfs_refcount_remove (& zh -> zh_refcount , NULL ) == 0 ) {
309
+ ASSERT3S (zh -> zh_refcount , > , 0 );
310
+ if (-- zh -> zh_refcount == 0 ) {
313
311
avl_remove (& zfsvfs -> z_hold_trees [i ], zh );
314
312
remove = B_TRUE ;
315
313
}
0 commit comments