@@ -169,8 +169,7 @@ zfs_znode_hold_cache_constructor(void *buf, void *arg, int kmflags)
169
169
znode_hold_t * zh = buf ;
170
170
171
171
mutex_init (& zh -> zh_lock , NULL , MUTEX_DEFAULT , NULL );
172
- zfs_refcount_create (& zh -> zh_refcount );
173
- zh -> zh_obj = ZFS_NO_OBJECT ;
172
+ zh -> zh_refcount = 0 ;
174
173
175
174
return (0 );
176
175
}
@@ -182,7 +181,6 @@ zfs_znode_hold_cache_destructor(void *buf, void *arg)
182
181
znode_hold_t * zh = buf ;
183
182
184
183
mutex_destroy (& zh -> zh_lock );
185
- zfs_refcount_destroy (& zh -> zh_refcount );
186
184
}
187
185
188
186
void
@@ -281,26 +279,26 @@ zfs_znode_hold_enter(zfsvfs_t *zfsvfs, uint64_t obj)
281
279
boolean_t found = B_FALSE ;
282
280
283
281
zh_new = kmem_cache_alloc (znode_hold_cache , KM_SLEEP );
284
- zh_new -> zh_obj = obj ;
285
282
search .zh_obj = obj ;
286
283
287
284
mutex_enter (& zfsvfs -> z_hold_locks [i ]);
288
285
zh = avl_find (& zfsvfs -> z_hold_trees [i ], & search , NULL );
289
286
if (likely (zh == NULL )) {
290
287
zh = zh_new ;
288
+ zh -> zh_obj = obj ;
291
289
avl_add (& zfsvfs -> z_hold_trees [i ], zh );
292
290
} else {
293
291
ASSERT3U (zh -> zh_obj , = = , obj );
294
292
found = B_TRUE ;
295
293
}
296
- zfs_refcount_add (& zh -> zh_refcount , NULL );
294
+ zh -> zh_refcount ++ ;
295
+ ASSERT3S (zh -> zh_refcount , > , 0 );
297
296
mutex_exit (& zfsvfs -> z_hold_locks [i ]);
298
297
299
298
if (found == B_TRUE )
300
299
kmem_cache_free (znode_hold_cache , zh_new );
301
300
302
301
ASSERT (MUTEX_NOT_HELD (& zh -> zh_lock ));
303
- ASSERT3S (zfs_refcount_count (& zh -> zh_refcount ), > , 0 );
304
302
mutex_enter (& zh -> zh_lock );
305
303
306
304
return (zh );
@@ -313,11 +311,11 @@ zfs_znode_hold_exit(zfsvfs_t *zfsvfs, znode_hold_t *zh)
313
311
boolean_t remove = B_FALSE ;
314
312
315
313
ASSERT (zfs_znode_held (zfsvfs , zh -> zh_obj ));
316
- ASSERT3S (zfs_refcount_count (& zh -> zh_refcount ), > , 0 );
317
314
mutex_exit (& zh -> zh_lock );
318
315
319
316
mutex_enter (& zfsvfs -> z_hold_locks [i ]);
320
- if (zfs_refcount_remove (& zh -> zh_refcount , NULL ) == 0 ) {
317
+ ASSERT3S (zh -> zh_refcount , > , 0 );
318
+ if (-- zh -> zh_refcount == 0 ) {
321
319
avl_remove (& zfsvfs -> z_hold_trees [i ], zh );
322
320
remove = B_TRUE ;
323
321
}
0 commit comments