Lines Matching refs:zfsvfs

253 zfs_is_readonly(zfsvfs_t *zfsvfs)  in zfs_is_readonly()  argument
255 return (!!(zfsvfs->z_sb->s_flags & SB_RDONLY)); in zfs_is_readonly()
262 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_sync() local
271 if (zfsvfs != NULL) { in zfs_sync()
278 if ((error = zfs_enter(zfsvfs, FTAG)) != 0) in zfs_sync()
280 dp = dmu_objset_pool(zfsvfs->z_os); in zfs_sync()
287 zfs_exit(zfsvfs, FTAG); in zfs_sync()
291 if (zfsvfs->z_log != NULL) in zfs_sync()
292 zil_commit(zfsvfs->z_log, 0); in zfs_sync()
294 zfs_exit(zfsvfs, FTAG); in zfs_sync()
310 zfsvfs_t *zfsvfs = arg; in atime_changed_cb() local
311 struct super_block *sb = zfsvfs->z_sb; in atime_changed_cb()
336 zfsvfs_t *zfsvfs = arg; in xattr_changed_cb() local
339 zfsvfs->z_flags &= ~ZSB_XATTR; in xattr_changed_cb()
341 zfsvfs->z_flags |= ZSB_XATTR; in xattr_changed_cb()
344 zfsvfs->z_xattr_sa = B_TRUE; in xattr_changed_cb()
346 zfsvfs->z_xattr_sa = B_FALSE; in xattr_changed_cb()
353 zfsvfs_t *zfsvfs = arg; in acltype_changed_cb() local
358 zfsvfs->z_acl_type = ZFS_ACLTYPE_OFF; in acltype_changed_cb()
359 zfsvfs->z_sb->s_flags &= ~SB_POSIXACL; in acltype_changed_cb()
363 zfsvfs->z_acl_type = ZFS_ACLTYPE_POSIX; in acltype_changed_cb()
364 zfsvfs->z_sb->s_flags |= SB_POSIXACL; in acltype_changed_cb()
366 zfsvfs->z_acl_type = ZFS_ACLTYPE_OFF; in acltype_changed_cb()
367 zfsvfs->z_sb->s_flags &= ~SB_POSIXACL; in acltype_changed_cb()
378 zfsvfs_t *zfsvfs = arg; in blksz_changed_cb() local
379 ASSERT3U(newval, <=, spa_maxblocksize(dmu_objset_spa(zfsvfs->z_os))); in blksz_changed_cb()
383 zfsvfs->z_max_blksz = newval; in blksz_changed_cb()
389 zfsvfs_t *zfsvfs = arg; in readonly_changed_cb() local
390 struct super_block *sb = zfsvfs->z_sb; in readonly_changed_cb()
419 zfsvfs_t *zfsvfs = arg; in nbmand_changed_cb() local
420 struct super_block *sb = zfsvfs->z_sb; in nbmand_changed_cb()
440 zfsvfs_t *zfsvfs = arg; in acl_mode_changed_cb() local
442 zfsvfs->z_acl_mode = newval; in acl_mode_changed_cb()
456 zfsvfs_t *zfsvfs = NULL; in zfs_register_callbacks() local
460 zfsvfs = vfsp->vfs_data; in zfs_register_callbacks()
461 ASSERT(zfsvfs); in zfs_register_callbacks()
462 os = zfsvfs->z_os; in zfs_register_callbacks()
470 if (zfs_is_readonly(zfsvfs) || !spa_writeable(dmu_objset_spa(os))) { in zfs_register_callbacks()
485 zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs); in zfs_register_callbacks()
487 zfs_prop_to_name(ZFS_PROP_RELATIME), relatime_changed_cb, zfsvfs); in zfs_register_callbacks()
489 zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs); in zfs_register_callbacks()
491 zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs); in zfs_register_callbacks()
493 zfs_prop_to_name(ZFS_PROP_READONLY), readonly_changed_cb, zfsvfs); in zfs_register_callbacks()
495 zfs_prop_to_name(ZFS_PROP_DEVICES), devices_changed_cb, zfsvfs); in zfs_register_callbacks()
497 zfs_prop_to_name(ZFS_PROP_SETUID), setuid_changed_cb, zfsvfs); in zfs_register_callbacks()
499 zfs_prop_to_name(ZFS_PROP_EXEC), exec_changed_cb, zfsvfs); in zfs_register_callbacks()
501 zfs_prop_to_name(ZFS_PROP_SNAPDIR), snapdir_changed_cb, zfsvfs); in zfs_register_callbacks()
503 zfs_prop_to_name(ZFS_PROP_ACLTYPE), acltype_changed_cb, zfsvfs); in zfs_register_callbacks()
505 zfs_prop_to_name(ZFS_PROP_ACLMODE), acl_mode_changed_cb, zfsvfs); in zfs_register_callbacks()
508 zfsvfs); in zfs_register_callbacks()
510 zfs_prop_to_name(ZFS_PROP_NBMAND), nbmand_changed_cb, zfsvfs); in zfs_register_callbacks()
519 readonly_changed_cb(zfsvfs, vfsp->vfs_readonly); in zfs_register_callbacks()
521 setuid_changed_cb(zfsvfs, vfsp->vfs_setuid); in zfs_register_callbacks()
523 exec_changed_cb(zfsvfs, vfsp->vfs_exec); in zfs_register_callbacks()
525 devices_changed_cb(zfsvfs, vfsp->vfs_devices); in zfs_register_callbacks()
527 xattr_changed_cb(zfsvfs, vfsp->vfs_xattr); in zfs_register_callbacks()
529 atime_changed_cb(zfsvfs, vfsp->vfs_atime); in zfs_register_callbacks()
531 relatime_changed_cb(zfsvfs, vfsp->vfs_relatime); in zfs_register_callbacks()
533 nbmand_changed_cb(zfsvfs, vfsp->vfs_nbmand); in zfs_register_callbacks()
538 dsl_prop_unregister_all(ds, zfsvfs); in zfs_register_callbacks()
624 zfsvfs_init(zfsvfs_t *zfsvfs, objset_t *os) in zfsvfs_init() argument
629 zfsvfs->z_max_blksz = SPA_OLD_MAXBLOCKSIZE; in zfsvfs_init()
630 zfsvfs->z_show_ctldir = ZFS_SNAPDIR_VISIBLE; in zfsvfs_init()
631 zfsvfs->z_os = os; in zfsvfs_init()
633 error = zfs_get_zplprop(os, ZFS_PROP_VERSION, &zfsvfs->z_version); in zfsvfs_init()
636 if (zfsvfs->z_version > in zfsvfs_init()
640 "this file system.\n", (u_longlong_t)zfsvfs->z_version, in zfsvfs_init()
647 zfsvfs->z_norm = (int)val; in zfsvfs_init()
652 zfsvfs->z_utf8 = (val != 0); in zfsvfs_init()
657 zfsvfs->z_case = (uint_t)val; in zfsvfs_init()
661 zfsvfs->z_acl_type = (uint_t)val; in zfsvfs_init()
667 if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE || in zfsvfs_init()
668 zfsvfs->z_case == ZFS_CASE_MIXED) in zfsvfs_init()
669 zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER; in zfsvfs_init()
671 zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); in zfsvfs_init()
672 zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); in zfsvfs_init()
675 if (zfsvfs->z_use_sa) { in zfsvfs_init()
684 zfsvfs->z_xattr_sa = B_TRUE; in zfsvfs_init()
688 &zfsvfs->z_root); in zfsvfs_init()
691 ASSERT(zfsvfs->z_root != 0); in zfsvfs_init()
694 &zfsvfs->z_unlinkedobj); in zfsvfs_init()
700 8, 1, &zfsvfs->z_userquota_obj); in zfsvfs_init()
702 zfsvfs->z_userquota_obj = 0; in zfsvfs_init()
708 8, 1, &zfsvfs->z_groupquota_obj); in zfsvfs_init()
710 zfsvfs->z_groupquota_obj = 0; in zfsvfs_init()
716 8, 1, &zfsvfs->z_projectquota_obj); in zfsvfs_init()
718 zfsvfs->z_projectquota_obj = 0; in zfsvfs_init()
724 8, 1, &zfsvfs->z_userobjquota_obj); in zfsvfs_init()
726 zfsvfs->z_userobjquota_obj = 0; in zfsvfs_init()
732 8, 1, &zfsvfs->z_groupobjquota_obj); in zfsvfs_init()
734 zfsvfs->z_groupobjquota_obj = 0; in zfsvfs_init()
740 8, 1, &zfsvfs->z_projectobjquota_obj); in zfsvfs_init()
742 zfsvfs->z_projectobjquota_obj = 0; in zfsvfs_init()
747 &zfsvfs->z_fuid_obj); in zfsvfs_init()
749 zfsvfs->z_fuid_obj = 0; in zfsvfs_init()
754 &zfsvfs->z_shares_dir); in zfsvfs_init()
756 zfsvfs->z_shares_dir = 0; in zfsvfs_init()
761 &zfsvfs->z_attr_table); in zfsvfs_init()
765 if (zfsvfs->z_version >= ZPL_VERSION_SA) in zfsvfs_init()
775 zfsvfs_t *zfsvfs; in zfsvfs_create() local
779 zfsvfs = kmem_zalloc(sizeof (zfsvfs_t), KM_SLEEP); in zfsvfs_create()
781 error = dmu_objset_own(osname, DMU_OST_ZFS, ro, B_TRUE, zfsvfs, &os); in zfsvfs_create()
783 kmem_free(zfsvfs, sizeof (zfsvfs_t)); in zfsvfs_create()
787 error = zfsvfs_create_impl(zfvp, zfsvfs, os); in zfsvfs_create()
798 zfsvfs_create_impl(zfsvfs_t **zfvp, zfsvfs_t *zfsvfs, objset_t *os) in zfsvfs_create_impl() argument
802 zfsvfs->z_vfs = NULL; in zfsvfs_create_impl()
803 zfsvfs->z_sb = NULL; in zfsvfs_create_impl()
804 zfsvfs->z_parent = zfsvfs; in zfsvfs_create_impl()
806 mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
807 mutex_init(&zfsvfs->z_lock, NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
808 list_create(&zfsvfs->z_all_znodes, sizeof (znode_t), in zfsvfs_create_impl()
810 ZFS_TEARDOWN_INIT(zfsvfs); in zfsvfs_create_impl()
811 rw_init(&zfsvfs->z_teardown_inactive_lock, NULL, RW_DEFAULT, NULL); in zfsvfs_create_impl()
812 rw_init(&zfsvfs->z_fuid_lock, NULL, RW_DEFAULT, NULL); in zfsvfs_create_impl()
816 zfsvfs->z_hold_size = size; in zfsvfs_create_impl()
817 zfsvfs->z_hold_trees = vmem_zalloc(sizeof (avl_tree_t) * size, in zfsvfs_create_impl()
819 zfsvfs->z_hold_locks = vmem_zalloc(sizeof (kmutex_t) * size, KM_SLEEP); in zfsvfs_create_impl()
821 avl_create(&zfsvfs->z_hold_trees[i], zfs_znode_hold_compare, in zfsvfs_create_impl()
823 mutex_init(&zfsvfs->z_hold_locks[i], NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
826 error = zfsvfs_init(zfsvfs, os); in zfsvfs_create_impl()
828 dmu_objset_disown(os, B_TRUE, zfsvfs); in zfsvfs_create_impl()
830 zfsvfs_free(zfsvfs); in zfsvfs_create_impl()
834 zfsvfs->z_drain_task = TASKQID_INVALID; in zfsvfs_create_impl()
835 zfsvfs->z_draining = B_FALSE; in zfsvfs_create_impl()
836 zfsvfs->z_drain_cancel = B_TRUE; in zfsvfs_create_impl()
838 *zfvp = zfsvfs; in zfsvfs_create_impl()
843 zfsvfs_setup(zfsvfs_t *zfsvfs, boolean_t mounting) in zfsvfs_setup() argument
846 boolean_t readonly = zfs_is_readonly(zfsvfs); in zfsvfs_setup()
848 error = zfs_register_callbacks(zfsvfs->z_vfs); in zfsvfs_setup()
858 ASSERT3P(zfsvfs->z_kstat.dk_kstats, ==, NULL); in zfsvfs_setup()
859 error = dataset_kstats_create(&zfsvfs->z_kstat, zfsvfs->z_os); in zfsvfs_setup()
862 zfsvfs->z_log = zil_open(zfsvfs->z_os, zfs_get_data, in zfsvfs_setup()
863 &zfsvfs->z_kstat.dk_zil_sums); in zfsvfs_setup()
870 readonly_changed_cb(zfsvfs, B_FALSE); in zfsvfs_setup()
873 if (zap_get_stats(zfsvfs->z_os, zfsvfs->z_unlinkedobj, in zfsvfs_setup()
876 &zfsvfs->z_kstat, zs.zs_num_entries); in zfsvfs_setup()
877 dprintf_ds(zfsvfs->z_os->os_dsl_dataset, in zfsvfs_setup()
881 zfs_unlinked_drain(zfsvfs); in zfsvfs_setup()
882 dsl_dir_t *dd = zfsvfs->z_os->os_dsl_dataset->ds_dir; in zfsvfs_setup()
913 if (spa_writeable(dmu_objset_spa(zfsvfs->z_os))) { in zfsvfs_setup()
915 zil_destroy(zfsvfs->z_log, B_FALSE); in zfsvfs_setup()
917 zfsvfs->z_replay = B_TRUE; in zfsvfs_setup()
918 zil_replay(zfsvfs->z_os, zfsvfs, in zfsvfs_setup()
920 zfsvfs->z_replay = B_FALSE; in zfsvfs_setup()
926 readonly_changed_cb(zfsvfs, B_TRUE); in zfsvfs_setup()
928 ASSERT3P(zfsvfs->z_kstat.dk_kstats, !=, NULL); in zfsvfs_setup()
929 zfsvfs->z_log = zil_open(zfsvfs->z_os, zfs_get_data, in zfsvfs_setup()
930 &zfsvfs->z_kstat.dk_zil_sums); in zfsvfs_setup()
936 mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); in zfsvfs_setup()
937 dmu_objset_set_user(zfsvfs->z_os, zfsvfs); in zfsvfs_setup()
938 mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); in zfsvfs_setup()
944 zfsvfs_free(zfsvfs_t *zfsvfs) in zfsvfs_free() argument
946 int i, size = zfsvfs->z_hold_size; in zfsvfs_free()
948 zfs_fuid_destroy(zfsvfs); in zfsvfs_free()
950 mutex_destroy(&zfsvfs->z_znodes_lock); in zfsvfs_free()
951 mutex_destroy(&zfsvfs->z_lock); in zfsvfs_free()
952 list_destroy(&zfsvfs->z_all_znodes); in zfsvfs_free()
953 ZFS_TEARDOWN_DESTROY(zfsvfs); in zfsvfs_free()
954 rw_destroy(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_free()
955 rw_destroy(&zfsvfs->z_fuid_lock); in zfsvfs_free()
957 avl_destroy(&zfsvfs->z_hold_trees[i]); in zfsvfs_free()
958 mutex_destroy(&zfsvfs->z_hold_locks[i]); in zfsvfs_free()
960 vmem_free(zfsvfs->z_hold_trees, sizeof (avl_tree_t) * size); in zfsvfs_free()
961 vmem_free(zfsvfs->z_hold_locks, sizeof (kmutex_t) * size); in zfsvfs_free()
962 zfsvfs_vfs_free(zfsvfs->z_vfs); in zfsvfs_free()
963 dataset_kstats_destroy(&zfsvfs->z_kstat); in zfsvfs_free()
964 kmem_free(zfsvfs, sizeof (zfsvfs_t)); in zfsvfs_free()
968 zfs_set_fuid_feature(zfsvfs_t *zfsvfs) in zfs_set_fuid_feature() argument
970 zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); in zfs_set_fuid_feature()
971 zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); in zfs_set_fuid_feature()
975 zfs_unregister_callbacks(zfsvfs_t *zfsvfs) in zfs_unregister_callbacks() argument
977 objset_t *os = zfsvfs->z_os; in zfs_unregister_callbacks()
980 dsl_prop_unregister_all(dmu_objset_ds(os), zfsvfs); in zfs_unregister_callbacks()
1013 zfs_statfs_project(zfsvfs_t *zfsvfs, znode_t *zp, struct kstatfs *statp, in zfs_statfs_project() argument
1023 err = zfs_id_to_fuidstr(zfsvfs, NULL, zp->z_projid, buf + offset, in zfs_statfs_project()
1028 if (zfsvfs->z_projectquota_obj == 0) in zfs_statfs_project()
1031 err = zap_lookup(zfsvfs->z_os, zfsvfs->z_projectquota_obj, in zfs_statfs_project()
1038 err = zap_lookup(zfsvfs->z_os, DMU_PROJECTUSED_OBJECT, in zfs_statfs_project()
1050 blksize = zfsvfs->z_max_blksz; in zfs_statfs_project()
1062 if (zfsvfs->z_projectobjquota_obj == 0) in zfs_statfs_project()
1065 err = zap_lookup(zfsvfs->z_os, zfsvfs->z_projectobjquota_obj, in zfs_statfs_project()
1072 err = zap_lookup(zfsvfs->z_os, DMU_PROJECTUSED_OBJECT, in zfs_statfs_project()
1093 zfsvfs_t *zfsvfs = ITOZSB(ip); in zfs_statvfs() local
1097 if ((err = zfs_enter(zfsvfs, FTAG)) != 0) in zfs_statvfs()
1100 dmu_objset_space(zfsvfs->z_os, in zfs_statvfs()
1103 uint64_t fsid = dmu_objset_fsid_guid(zfsvfs->z_os); in zfs_statvfs()
1113 statp->f_frsize = zfsvfs->z_max_blksz; in zfs_statvfs()
1114 statp->f_bsize = zfsvfs->z_max_blksz; in zfs_statvfs()
1150 if (dmu_objset_projectquota_enabled(zfsvfs->z_os) && in zfs_statvfs()
1151 dmu_objset_projectquota_present(zfsvfs->z_os)) { in zfs_statvfs()
1156 err = zfs_statfs_project(zfsvfs, zp, statp, bshift); in zfs_statvfs()
1159 zfs_exit(zfsvfs, FTAG); in zfs_statvfs()
1164 zfs_root(zfsvfs_t *zfsvfs, struct inode **ipp) in zfs_root() argument
1169 if ((error = zfs_enter(zfsvfs, FTAG)) != 0) in zfs_root()
1172 error = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp); in zfs_root()
1176 zfs_exit(zfsvfs, FTAG); in zfs_root()
1190 zfs_prune_aliases(zfsvfs_t *zfsvfs, unsigned long nr_to_scan) in zfs_prune_aliases() argument
1199 mutex_enter(&zfsvfs->z_znodes_lock); in zfs_prune_aliases()
1200 while ((zp = list_head(&zfsvfs->z_all_znodes)) != NULL) { in zfs_prune_aliases()
1206 list_remove(&zfsvfs->z_all_znodes, zp); in zfs_prune_aliases()
1207 list_insert_tail(&zfsvfs->z_all_znodes, zp); in zfs_prune_aliases()
1219 mutex_exit(&zfsvfs->z_znodes_lock); in zfs_prune_aliases()
1252 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_prune() local
1260 if ((error = zfs_enter(zfsvfs, FTAG)) != 0) in zfs_prune()
1286 *objects = zfs_prune_aliases(zfsvfs, nr_to_scan); in zfs_prune()
1299 *objects = zfs_prune_aliases(zfsvfs, nr_to_scan); in zfs_prune()
1302 zfs_exit(zfsvfs, FTAG); in zfs_prune()
1304 dprintf_ds(zfsvfs->z_os->os_dsl_dataset, in zfs_prune()
1318 zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting) in zfsvfs_teardown() argument
1322 zfs_unlinked_drain_stop_wait(zfsvfs); in zfsvfs_teardown()
1329 if (zfsvfs->z_os) { in zfsvfs_teardown()
1343 while (!list_is_empty(&zfsvfs->z_all_znodes)) { in zfsvfs_teardown()
1345 dmu_objset_pool(zfsvfs->z_os)), 0); in zfsvfs_teardown()
1351 ZFS_TEARDOWN_ENTER_WRITE(zfsvfs, FTAG); in zfsvfs_teardown()
1361 shrink_dcache_sb(zfsvfs->z_parent->z_sb); in zfsvfs_teardown()
1368 if (zfsvfs->z_log) { in zfsvfs_teardown()
1369 zil_close(zfsvfs->z_log); in zfsvfs_teardown()
1370 zfsvfs->z_log = NULL; in zfsvfs_teardown()
1373 rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER); in zfsvfs_teardown()
1380 if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) { in zfsvfs_teardown()
1381 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_teardown()
1382 ZFS_TEARDOWN_EXIT(zfsvfs, FTAG); in zfsvfs_teardown()
1399 mutex_enter(&zfsvfs->z_znodes_lock); in zfsvfs_teardown()
1400 for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL; in zfsvfs_teardown()
1401 zp = list_next(&zfsvfs->z_all_znodes, zp)) { in zfsvfs_teardown()
1408 mutex_exit(&zfsvfs->z_znodes_lock); in zfsvfs_teardown()
1417 zfsvfs->z_unmounted = B_TRUE; in zfsvfs_teardown()
1418 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_teardown()
1419 ZFS_TEARDOWN_EXIT(zfsvfs, FTAG); in zfsvfs_teardown()
1428 if (zfsvfs->z_os == NULL) in zfsvfs_teardown()
1434 zfs_unregister_callbacks(zfsvfs); in zfsvfs_teardown()
1440 objset_t *os = zfsvfs->z_os; in zfsvfs_teardown()
1448 if (!zfs_is_readonly(zfsvfs) && os_dirty) { in zfsvfs_teardown()
1449 txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); in zfsvfs_teardown()
1451 dmu_objset_evict_dbufs(zfsvfs->z_os); in zfsvfs_teardown()
1469 zfsvfs_t *zfsvfs = NULL; in zfs_domount() local
1499 error = zfsvfs_create(osname, vfs->vfs_readonly, &zfsvfs); in zfs_domount()
1511 vfs->vfs_data = zfsvfs; in zfs_domount()
1512 zfsvfs->z_vfs = vfs; in zfs_domount()
1513 zfsvfs->z_sb = sb; in zfs_domount()
1514 sb->s_fs_info = zfsvfs; in zfs_domount()
1533 zfs_set_fuid_feature(zfsvfs); in zfs_domount()
1535 if (dmu_objset_is_snapshot(zfsvfs->z_os)) { in zfs_domount()
1538 atime_changed_cb(zfsvfs, B_FALSE); in zfs_domount()
1539 readonly_changed_cb(zfsvfs, B_TRUE); in zfs_domount()
1543 xattr_changed_cb(zfsvfs, pval); in zfs_domount()
1547 acltype_changed_cb(zfsvfs, pval); in zfs_domount()
1548 zfsvfs->z_issnap = B_TRUE; in zfs_domount()
1549 zfsvfs->z_os->os_sync = ZFS_SYNC_DISABLED; in zfs_domount()
1550 zfsvfs->z_snap_defer_time = jiffies; in zfs_domount()
1552 mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); in zfs_domount()
1553 dmu_objset_set_user(zfsvfs->z_os, zfsvfs); in zfs_domount()
1554 mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); in zfs_domount()
1556 if ((error = zfsvfs_setup(zfsvfs, B_TRUE))) in zfs_domount()
1561 error = zfs_root(zfsvfs, &root_inode); in zfs_domount()
1564 zfsvfs = NULL; /* avoid double-free; first in zfs_umount */ in zfs_domount()
1572 zfsvfs = NULL; /* avoid double-free; first in zfs_umount */ in zfs_domount()
1577 if (!zfsvfs->z_issnap) in zfs_domount()
1578 zfsctl_create(zfsvfs); in zfs_domount()
1580 zfsvfs->z_arc_prune = arc_add_prune_callback(zpl_prune_sb, sb); in zfs_domount()
1583 if (zfsvfs != NULL) { in zfs_domount()
1584 dmu_objset_disown(zfsvfs->z_os, B_TRUE, zfsvfs); in zfs_domount()
1585 zfsvfs_free(zfsvfs); in zfs_domount()
1607 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_preumount() local
1610 if (zfsvfs) { in zfs_preumount()
1611 zfs_unlinked_drain_stop_wait(zfsvfs); in zfs_preumount()
1629 dmu_objset_pool(zfsvfs->z_os)), 0); in zfs_preumount()
1631 dmu_objset_pool(zfsvfs->z_os)), 0); in zfs_preumount()
1642 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_umount() local
1645 if (zfsvfs->z_arc_prune != NULL) in zfs_umount()
1646 arc_remove_prune_callback(zfsvfs->z_arc_prune); in zfs_umount()
1647 VERIFY(zfsvfs_teardown(zfsvfs, B_TRUE) == 0); in zfs_umount()
1648 os = zfsvfs->z_os; in zfs_umount()
1666 dmu_objset_disown(os, B_TRUE, zfsvfs); in zfs_umount()
1669 zfsvfs_free(zfsvfs); in zfs_umount()
1677 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_remount() local
1679 boolean_t issnap = dmu_objset_is_snapshot(zfsvfs->z_os); in zfs_remount()
1682 if ((issnap || !spa_writeable(dmu_objset_spa(zfsvfs->z_os))) && in zfs_remount()
1692 if (!zfs_is_readonly(zfsvfs) && (*flags & SB_RDONLY)) in zfs_remount()
1693 txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); in zfs_remount()
1695 zfs_unregister_callbacks(zfsvfs); in zfs_remount()
1696 zfsvfs_vfs_free(zfsvfs->z_vfs); in zfs_remount()
1698 vfsp->vfs_data = zfsvfs; in zfs_remount()
1699 zfsvfs->z_vfs = vfsp; in zfs_remount()
1709 zfsvfs_t *zfsvfs = sb->s_fs_info; in zfs_vget() local
1760 if ((err = zfs_enter(zfsvfs, FTAG)) != 0) in zfs_vget()
1765 *ipp = zfsvfs->z_ctldir; in zfs_vget()
1777 zfs_exit(zfsvfs, FTAG); in zfs_vget()
1784 if ((err = zfs_zget(zfsvfs, object, &zp))) { in zfs_vget()
1785 zfs_exit(zfsvfs, FTAG); in zfs_vget()
1792 zfs_exit(zfsvfs, FTAG); in zfs_vget()
1796 (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), &zp_gen, in zfs_vget()
1801 if ((fid_gen == 0) && (zfsvfs->z_root == object)) in zfs_vget()
1807 zfs_exit(zfsvfs, FTAG); in zfs_vget()
1815 zfs_exit(zfsvfs, FTAG); in zfs_vget()
1828 zfs_suspend_fs(zfsvfs_t *zfsvfs) in zfs_suspend_fs() argument
1832 if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0) in zfs_suspend_fs()
1846 zfs_resume_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds) in zfs_resume_fs() argument
1851 ASSERT(ZFS_TEARDOWN_WRITE_HELD(zfsvfs)); in zfs_resume_fs()
1852 ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); in zfs_resume_fs()
1859 VERIFY3P(ds->ds_owner, ==, zfsvfs); in zfs_resume_fs()
1866 err = zfsvfs_init(zfsvfs, os); in zfs_resume_fs()
1871 VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); in zfs_resume_fs()
1873 zfs_set_fuid_feature(zfsvfs); in zfs_resume_fs()
1874 zfsvfs->z_rollback_time = jiffies; in zfs_resume_fs()
1885 mutex_enter(&zfsvfs->z_znodes_lock); in zfs_resume_fs()
1886 for (zp = list_head(&zfsvfs->z_all_znodes); zp; in zfs_resume_fs()
1887 zp = list_next(&zfsvfs->z_all_znodes, zp)) { in zfs_resume_fs()
1900 mutex_exit(&zfsvfs->z_znodes_lock); in zfs_resume_fs()
1902 if (!zfs_is_readonly(zfsvfs) && !zfsvfs->z_unmounted) { in zfs_resume_fs()
1908 zfs_unlinked_drain(zfsvfs); in zfs_resume_fs()
1919 shrink_dcache_sb(zfsvfs->z_sb); in zfs_resume_fs()
1923 zfsvfs->z_unmounted = B_TRUE; in zfs_resume_fs()
1926 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfs_resume_fs()
1927 ZFS_TEARDOWN_EXIT(zfsvfs, FTAG); in zfs_resume_fs()
1934 if (zfsvfs->z_os) in zfs_resume_fs()
1935 (void) zfs_umount(zfsvfs->z_sb); in zfs_resume_fs()
1944 zfs_end_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds) in zfs_end_fs() argument
1946 ASSERT(ZFS_TEARDOWN_WRITE_HELD(zfsvfs)); in zfs_end_fs()
1947 ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); in zfs_end_fs()
1954 VERIFY3P(ds->ds_owner, ==, zfsvfs); in zfs_end_fs()
1960 zfsvfs->z_os = os; in zfs_end_fs()
1963 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfs_end_fs()
1964 ZFS_TEARDOWN_EXIT(zfsvfs, FTAG); in zfs_end_fs()
1969 (void) zfs_umount(zfsvfs->z_sb); in zfs_end_fs()
1970 zfsvfs->z_unmounted = B_TRUE; in zfs_end_fs()
1980 zfs_exit_fs(zfsvfs_t *zfsvfs) in zfs_exit_fs() argument
1982 if (!zfsvfs->z_issnap) in zfs_exit_fs()
1985 if (time_after(jiffies, zfsvfs->z_snap_defer_time + in zfs_exit_fs()
1987 zfsvfs->z_snap_defer_time = jiffies; in zfs_exit_fs()
1988 zfsctl_snapshot_unmount_delay(zfsvfs->z_os->os_spa, in zfs_exit_fs()
1989 dmu_objset_id(zfsvfs->z_os), in zfs_exit_fs()
1995 zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers) in zfs_set_version() argument
1998 objset_t *os = zfsvfs->z_os; in zfs_set_version()
2004 if (newvers < zfsvfs->z_version) in zfs_set_version()
2008 spa_version(dmu_objset_spa(zfsvfs->z_os))) in zfs_set_version()
2013 if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { in zfs_set_version()
2032 if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { in zfs_set_version()
2035 ASSERT3U(spa_version(dmu_objset_spa(zfsvfs->z_os)), >=, in zfs_set_version()
2049 "from %llu to %llu", zfsvfs->z_version, newvers); in zfs_set_version()
2053 zfsvfs->z_version = newvers; in zfs_set_version()
2056 zfs_set_fuid_feature(zfsvfs); in zfs_set_version()