Lines Matching refs:zfsvfs
195 zfs_fuid_init(zfsvfs_t *zfsvfs) in zfs_fuid_init() argument
197 rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); in zfs_fuid_init()
199 if (zfsvfs->z_fuid_loaded) { in zfs_fuid_init()
200 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_init()
204 zfs_fuid_avl_tree_create(&zfsvfs->z_fuid_idx, &zfsvfs->z_fuid_domain); in zfs_fuid_init()
206 (void) zap_lookup(zfsvfs->z_os, MASTER_NODE_OBJ, in zfs_fuid_init()
207 ZFS_FUID_TABLES, 8, 1, &zfsvfs->z_fuid_obj); in zfs_fuid_init()
208 if (zfsvfs->z_fuid_obj != 0) { in zfs_fuid_init()
209 zfsvfs->z_fuid_size = zfs_fuid_table_load(zfsvfs->z_os, in zfs_fuid_init()
210 zfsvfs->z_fuid_obj, &zfsvfs->z_fuid_idx, in zfs_fuid_init()
211 &zfsvfs->z_fuid_domain); in zfs_fuid_init()
214 zfsvfs->z_fuid_loaded = B_TRUE; in zfs_fuid_init()
215 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_init()
222 zfs_fuid_sync(zfsvfs_t *zfsvfs, dmu_tx_t *tx) in zfs_fuid_sync() argument
233 if (!zfsvfs->z_fuid_dirty) { in zfs_fuid_sync()
237 rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); in zfs_fuid_sync()
242 if (zfsvfs->z_fuid_obj == 0) { in zfs_fuid_sync()
243 zfsvfs->z_fuid_obj = dmu_object_alloc(zfsvfs->z_os, in zfs_fuid_sync()
246 VERIFY(zap_add(zfsvfs->z_os, MASTER_NODE_OBJ, in zfs_fuid_sync()
248 &zfsvfs->z_fuid_obj, tx) == 0); in zfs_fuid_sync()
253 numnodes = avl_numnodes(&zfsvfs->z_fuid_idx); in zfs_fuid_sync()
255 for (i = 0, domnode = avl_first(&zfsvfs->z_fuid_domain); domnode; i++, in zfs_fuid_sync()
256 domnode = AVL_NEXT(&zfsvfs->z_fuid_domain, domnode)) { in zfs_fuid_sync()
274 zfsvfs->z_fuid_size = nvsize; in zfs_fuid_sync()
275 dmu_write(zfsvfs->z_os, zfsvfs->z_fuid_obj, 0, in zfs_fuid_sync()
276 zfsvfs->z_fuid_size, packed, tx); in zfs_fuid_sync()
277 kmem_free(packed, zfsvfs->z_fuid_size); in zfs_fuid_sync()
278 VERIFY(0 == dmu_bonus_hold(zfsvfs->z_os, zfsvfs->z_fuid_obj, in zfs_fuid_sync()
281 *(uint64_t *)db->db_data = zfsvfs->z_fuid_size; in zfs_fuid_sync()
284 zfsvfs->z_fuid_dirty = B_FALSE; in zfs_fuid_sync()
285 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_sync()
297 zfs_fuid_find_by_domain(zfsvfs_t *zfsvfs, const char *domain, in zfs_fuid_find_by_domain() argument
318 if (!zfsvfs->z_fuid_loaded) in zfs_fuid_find_by_domain()
319 zfs_fuid_init(zfsvfs); in zfs_fuid_find_by_domain()
322 rw_enter(&zfsvfs->z_fuid_lock, rw); in zfs_fuid_find_by_domain()
323 findnode = avl_find(&zfsvfs->z_fuid_domain, &searchnode, &loc); in zfs_fuid_find_by_domain()
326 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_find_by_domain()
333 if (rw == RW_READER && !rw_tryupgrade(&zfsvfs->z_fuid_lock)) { in zfs_fuid_find_by_domain()
334 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_find_by_domain()
342 retidx = domnode->f_idx = avl_numnodes(&zfsvfs->z_fuid_idx) + 1; in zfs_fuid_find_by_domain()
344 avl_add(&zfsvfs->z_fuid_domain, domnode); in zfs_fuid_find_by_domain()
345 avl_add(&zfsvfs->z_fuid_idx, domnode); in zfs_fuid_find_by_domain()
346 zfsvfs->z_fuid_dirty = B_TRUE; in zfs_fuid_find_by_domain()
347 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_find_by_domain()
350 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_find_by_domain()
362 zfs_fuid_find_by_idx(zfsvfs_t *zfsvfs, uint32_t idx) in zfs_fuid_find_by_idx() argument
366 if (idx == 0 || !zfsvfs->z_use_fuids) in zfs_fuid_find_by_idx()
369 if (!zfsvfs->z_fuid_loaded) in zfs_fuid_find_by_idx()
370 zfs_fuid_init(zfsvfs); in zfs_fuid_find_by_idx()
372 rw_enter(&zfsvfs->z_fuid_lock, RW_READER); in zfs_fuid_find_by_idx()
374 if (zfsvfs->z_fuid_obj || zfsvfs->z_fuid_dirty) in zfs_fuid_find_by_idx()
375 domain = zfs_fuid_idx_domain(&zfsvfs->z_fuid_idx, idx); in zfs_fuid_find_by_idx()
378 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_find_by_idx()
392 zfs_fuid_map_id(zfsvfs_t *zfsvfs, uint64_t fuid, in zfs_fuid_map_id() argument
402 domain = zfs_fuid_find_by_idx(zfsvfs, index); in zfs_fuid_map_id()
490 zfs_fuid_create_cred(zfsvfs_t *zfsvfs, zfs_fuid_type_t type, in zfs_fuid_create_cred() argument
504 if (!zfsvfs->z_use_fuids || (ksid == NULL)) { in zfs_fuid_create_cred()
527 idx = zfs_fuid_find_by_domain(zfsvfs, domain, &kdomain, B_TRUE); in zfs_fuid_create_cred()
547 zfs_fuid_create(zfsvfs_t *zfsvfs, uint64_t id, cred_t *cr, in zfs_fuid_create() argument
567 if (!zfsvfs->z_use_fuids || !IS_EPHEMERAL(id) || fuid_idx != 0) in zfs_fuid_create()
570 if (zfsvfs->z_replay) { in zfs_fuid_create()
571 fuidp = zfsvfs->z_fuid_replay; in zfs_fuid_create()
621 idx = zfs_fuid_find_by_domain(zfsvfs, domain, &kdomain, B_TRUE); in zfs_fuid_create()
623 if (!zfsvfs->z_replay) in zfs_fuid_create()
634 zfs_fuid_destroy(zfsvfs_t *zfsvfs) in zfs_fuid_destroy() argument
636 rw_enter(&zfsvfs->z_fuid_lock, RW_WRITER); in zfs_fuid_destroy()
637 if (!zfsvfs->z_fuid_loaded) { in zfs_fuid_destroy()
638 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_destroy()
641 zfs_fuid_table_destroy(&zfsvfs->z_fuid_idx, &zfsvfs->z_fuid_domain); in zfs_fuid_destroy()
642 rw_exit(&zfsvfs->z_fuid_lock); in zfs_fuid_destroy()
692 zfs_user_in_cred(zfsvfs_t *zfsvfs, uint64_t id, cred_t *cr) in zfs_user_in_cred() argument
699 uid = zfs_fuid_map_id(zfsvfs, id, cr, ZFS_ACE_USER); in zfs_user_in_cred()
720 domain = zfs_fuid_find_by_idx(zfsvfs, idx); in zfs_user_in_cred()
740 zfs_groupmember(zfsvfs_t *zfsvfs, uint64_t id, cred_t *cr) in zfs_groupmember() argument
752 domain = zfs_fuid_find_by_idx(zfsvfs, idx); in zfs_groupmember()
770 gid = zfs_fuid_map_id(zfsvfs, id, cr, ZFS_GROUP); in zfs_groupmember()
775 zfs_fuid_txhold(zfsvfs_t *zfsvfs, dmu_tx_t *tx) in zfs_fuid_txhold() argument
777 if (zfsvfs->z_fuid_obj == 0) { in zfs_fuid_txhold()
780 FUID_SIZE_ESTIMATE(zfsvfs)); in zfs_fuid_txhold()
783 dmu_tx_hold_bonus(tx, zfsvfs->z_fuid_obj); in zfs_fuid_txhold()
784 dmu_tx_hold_write(tx, zfsvfs->z_fuid_obj, 0, in zfs_fuid_txhold()
785 FUID_SIZE_ESTIMATE(zfsvfs)); in zfs_fuid_txhold()