Lines Matching refs:zfsvfs
161 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_sync() local
164 ZFS_ENTER(zfsvfs); in zfs_sync()
165 dp = dmu_objset_pool(zfsvfs->z_os); in zfs_sync()
172 ZFS_EXIT(zfsvfs); in zfs_sync()
176 if (zfsvfs->z_log != NULL) in zfs_sync()
177 zil_commit(zfsvfs->z_log, 0); in zfs_sync()
179 ZFS_EXIT(zfsvfs); in zfs_sync()
260 zfsvfs_t *zfsvfs = arg; in atime_changed_cb() local
263 zfsvfs->z_atime = TRUE; in atime_changed_cb()
264 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOATIME); in atime_changed_cb()
265 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_ATIME, NULL, 0); in atime_changed_cb()
267 zfsvfs->z_atime = FALSE; in atime_changed_cb()
268 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_ATIME); in atime_changed_cb()
269 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOATIME, NULL, 0); in atime_changed_cb()
276 zfsvfs_t *zfsvfs = arg; in xattr_changed_cb() local
280 zfsvfs->z_vfs->vfs_flag |= VFS_XATTR; in xattr_changed_cb()
281 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOXATTR); in xattr_changed_cb()
282 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_XATTR, NULL, 0); in xattr_changed_cb()
285 zfsvfs->z_vfs->vfs_flag &= ~VFS_XATTR; in xattr_changed_cb()
286 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_XATTR); in xattr_changed_cb()
287 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOXATTR, NULL, 0); in xattr_changed_cb()
294 zfsvfs_t *zfsvfs = arg; in blksz_changed_cb() local
295 ASSERT3U(newval, <=, spa_maxblocksize(dmu_objset_spa(zfsvfs->z_os))); in blksz_changed_cb()
299 zfsvfs->z_max_blksz = newval; in blksz_changed_cb()
300 zfsvfs->z_vfs->vfs_bsize = newval; in blksz_changed_cb()
306 zfsvfs_t *zfsvfs = arg; in readonly_changed_cb() local
310 zfsvfs->z_vfs->vfs_flag |= VFS_RDONLY; in readonly_changed_cb()
311 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_RW); in readonly_changed_cb()
312 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_RO, NULL, 0); in readonly_changed_cb()
315 zfsvfs->z_vfs->vfs_flag &= ~VFS_RDONLY; in readonly_changed_cb()
316 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_RO); in readonly_changed_cb()
317 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_RW, NULL, 0); in readonly_changed_cb()
324 zfsvfs_t *zfsvfs = arg; in devices_changed_cb() local
327 zfsvfs->z_vfs->vfs_flag |= VFS_NODEVICES; in devices_changed_cb()
328 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_DEVICES); in devices_changed_cb()
329 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NODEVICES, NULL, 0); in devices_changed_cb()
331 zfsvfs->z_vfs->vfs_flag &= ~VFS_NODEVICES; in devices_changed_cb()
332 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NODEVICES); in devices_changed_cb()
333 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_DEVICES, NULL, 0); in devices_changed_cb()
340 zfsvfs_t *zfsvfs = arg; in setuid_changed_cb() local
343 zfsvfs->z_vfs->vfs_flag |= VFS_NOSETUID; in setuid_changed_cb()
344 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_SETUID); in setuid_changed_cb()
345 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOSETUID, NULL, 0); in setuid_changed_cb()
347 zfsvfs->z_vfs->vfs_flag &= ~VFS_NOSETUID; in setuid_changed_cb()
348 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOSETUID); in setuid_changed_cb()
349 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_SETUID, NULL, 0); in setuid_changed_cb()
356 zfsvfs_t *zfsvfs = arg; in exec_changed_cb() local
359 zfsvfs->z_vfs->vfs_flag |= VFS_NOEXEC; in exec_changed_cb()
360 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_EXEC); in exec_changed_cb()
361 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NOEXEC, NULL, 0); in exec_changed_cb()
363 zfsvfs->z_vfs->vfs_flag &= ~VFS_NOEXEC; in exec_changed_cb()
364 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NOEXEC); in exec_changed_cb()
365 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_EXEC, NULL, 0); in exec_changed_cb()
380 zfsvfs_t *zfsvfs = arg; in nbmand_changed_cb() local
382 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NBMAND); in nbmand_changed_cb()
383 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NONBMAND, NULL, 0); in nbmand_changed_cb()
385 vfs_clearmntopt(zfsvfs->z_vfs, MNTOPT_NONBMAND); in nbmand_changed_cb()
386 vfs_setmntopt(zfsvfs->z_vfs, MNTOPT_NBMAND, NULL, 0); in nbmand_changed_cb()
393 zfsvfs_t *zfsvfs = arg; in snapdir_changed_cb() local
395 zfsvfs->z_show_ctldir = newval; in snapdir_changed_cb()
401 zfsvfs_t *zfsvfs = arg; in vscan_changed_cb() local
403 zfsvfs->z_vscan = newval; in vscan_changed_cb()
409 zfsvfs_t *zfsvfs = arg; in acl_mode_changed_cb() local
411 zfsvfs->z_acl_mode = newval; in acl_mode_changed_cb()
417 zfsvfs_t *zfsvfs = arg; in acl_inherit_changed_cb() local
419 zfsvfs->z_acl_inherit = newval; in acl_inherit_changed_cb()
425 zfsvfs_t *zfsvfs = arg; in acl_implicit_changed_cb() local
427 zfsvfs->z_acl_implicit = (boolean_t)newval; in acl_implicit_changed_cb()
435 zfsvfs_t *zfsvfs = NULL; in zfs_register_callbacks() local
452 zfsvfs = vfsp->vfs_data; in zfs_register_callbacks()
453 ASSERT(zfsvfs); in zfs_register_callbacks()
454 os = zfsvfs->z_os; in zfs_register_callbacks()
545 zfs_prop_to_name(ZFS_PROP_ATIME), atime_changed_cb, zfsvfs); in zfs_register_callbacks()
547 zfs_prop_to_name(ZFS_PROP_XATTR), xattr_changed_cb, zfsvfs); in zfs_register_callbacks()
549 zfs_prop_to_name(ZFS_PROP_RECORDSIZE), blksz_changed_cb, zfsvfs); in zfs_register_callbacks()
551 zfs_prop_to_name(ZFS_PROP_READONLY), readonly_changed_cb, zfsvfs); in zfs_register_callbacks()
553 zfs_prop_to_name(ZFS_PROP_DEVICES), devices_changed_cb, zfsvfs); in zfs_register_callbacks()
555 zfs_prop_to_name(ZFS_PROP_SETUID), setuid_changed_cb, zfsvfs); in zfs_register_callbacks()
557 zfs_prop_to_name(ZFS_PROP_EXEC), exec_changed_cb, zfsvfs); in zfs_register_callbacks()
559 zfs_prop_to_name(ZFS_PROP_SNAPDIR), snapdir_changed_cb, zfsvfs); in zfs_register_callbacks()
561 zfs_prop_to_name(ZFS_PROP_ACLMODE), acl_mode_changed_cb, zfsvfs); in zfs_register_callbacks()
564 zfsvfs); in zfs_register_callbacks()
567 acl_implicit_changed_cb, zfsvfs); in zfs_register_callbacks()
569 zfs_prop_to_name(ZFS_PROP_VSCAN), vscan_changed_cb, zfsvfs); in zfs_register_callbacks()
578 readonly_changed_cb(zfsvfs, readonly); in zfs_register_callbacks()
580 setuid_changed_cb(zfsvfs, setuid); in zfs_register_callbacks()
582 exec_changed_cb(zfsvfs, exec); in zfs_register_callbacks()
584 devices_changed_cb(zfsvfs, devices); in zfs_register_callbacks()
586 xattr_changed_cb(zfsvfs, xattr); in zfs_register_callbacks()
588 atime_changed_cb(zfsvfs, atime); in zfs_register_callbacks()
590 nbmand_changed_cb(zfsvfs, nbmand); in zfs_register_callbacks()
595 dsl_prop_unregister_all(ds, zfsvfs); in zfs_register_callbacks()
676 fuidstr_to_sid(zfsvfs_t *zfsvfs, const char *fuidstr, in fuidstr_to_sid() argument
684 domain = zfs_fuid_find_by_idx(zfsvfs, FUID_INDEX(fuid)); in fuidstr_to_sid()
693 zfs_userquota_prop_to_obj(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type) in zfs_userquota_prop_to_obj() argument
706 return (zfsvfs->z_userquota_obj); in zfs_userquota_prop_to_obj()
708 return (zfsvfs->z_groupquota_obj); in zfs_userquota_prop_to_obj()
710 return (zfsvfs->z_userobjquota_obj); in zfs_userquota_prop_to_obj()
712 return (zfsvfs->z_groupobjquota_obj); in zfs_userquota_prop_to_obj()
714 return (zfsvfs->z_projectquota_obj); in zfs_userquota_prop_to_obj()
716 return (zfsvfs->z_projectobjquota_obj); in zfs_userquota_prop_to_obj()
723 zfs_userspace_many(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, in zfs_userspace_many() argument
733 if (!dmu_objset_userspace_present(zfsvfs->z_os)) in zfs_userspace_many()
739 !dmu_objset_projectquota_present(zfsvfs->z_os)) in zfs_userspace_many()
746 !dmu_objset_userobjspace_present(zfsvfs->z_os)) in zfs_userspace_many()
749 obj = zfs_userquota_prop_to_obj(zfsvfs, type); in zfs_userspace_many()
759 for (zap_cursor_init_serialized(&zc, zfsvfs->z_os, obj, *cookiep); in zfs_userspace_many()
774 fuidstr_to_sid(zfsvfs, za.za_name + offset, in zfs_userspace_many()
794 id_to_fuidstr(zfsvfs_t *zfsvfs, const char *domain, uid_t rid, in id_to_fuidstr() argument
801 domainid = zfs_fuid_find_by_domain(zfsvfs, domain, NULL, addok); in id_to_fuidstr()
811 zfs_userspace_one(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, in zfs_userspace_one() argument
822 if (!dmu_objset_userspace_present(zfsvfs->z_os)) in zfs_userspace_one()
829 !dmu_objset_userobjspace_present(zfsvfs->z_os)) in zfs_userspace_one()
835 if (!dmu_objset_projectquota_present(zfsvfs->z_os)) in zfs_userspace_one()
841 obj = zfs_userquota_prop_to_obj(zfsvfs, type); in zfs_userspace_one()
850 err = id_to_fuidstr(zfsvfs, domain, rid, &ils, B_FALSE); in zfs_userspace_one()
855 err = zap_lookup(zfsvfs->z_os, obj, buf, 8, 1, valp); in zfs_userspace_one()
862 zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type, in zfs_set_userquota() argument
871 if (zfsvfs->z_version < ZPL_VERSION_USERSPACE) in zfs_set_userquota()
876 objp = &zfsvfs->z_userquota_obj; in zfs_set_userquota()
879 objp = &zfsvfs->z_groupquota_obj; in zfs_set_userquota()
882 objp = &zfsvfs->z_userobjquota_obj; in zfs_set_userquota()
885 objp = &zfsvfs->z_groupobjquota_obj; in zfs_set_userquota()
888 if (!dmu_objset_projectquota_enabled(zfsvfs->z_os)) in zfs_set_userquota()
893 objp = &zfsvfs->z_projectquota_obj; in zfs_set_userquota()
896 if (!dmu_objset_projectquota_enabled(zfsvfs->z_os)) in zfs_set_userquota()
901 objp = &zfsvfs->z_projectobjquota_obj; in zfs_set_userquota()
909 err = id_to_fuidstr(zfsvfs, domain, rid, &ils, B_TRUE); in zfs_set_userquota()
913 fuid_dirtied = zfsvfs->z_fuid_dirty; in zfs_set_userquota()
915 tx = dmu_tx_create(zfsvfs->z_os); in zfs_set_userquota()
922 zfs_fuid_txhold(zfsvfs, tx); in zfs_set_userquota()
929 mutex_enter(&zfsvfs->z_lock); in zfs_set_userquota()
931 *objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA, in zfs_set_userquota()
933 VERIFY(0 == zap_add(zfsvfs->z_os, MASTER_NODE_OBJ, in zfs_set_userquota()
936 mutex_exit(&zfsvfs->z_lock); in zfs_set_userquota()
939 err = zap_remove(zfsvfs->z_os, *objp, buf, tx); in zfs_set_userquota()
943 err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, "a, tx); in zfs_set_userquota()
947 zfs_fuid_sync(zfsvfs, tx); in zfs_set_userquota()
953 zfs_id_overobjquota(zfsvfs_t *zfsvfs, uint64_t usedobj, uint64_t id) in zfs_id_overobjquota() argument
959 if (!dmu_objset_userobjspace_present(zfsvfs->z_os)) { in zfs_id_overobjquota()
960 if (dmu_objset_userobjspace_upgradable(zfsvfs->z_os)) { in zfs_id_overobjquota()
962 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overobjquota()
963 dmu_objset_id_quota_upgrade(zfsvfs->z_os); in zfs_id_overobjquota()
965 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overobjquota()
971 if (!dmu_objset_projectquota_present(zfsvfs->z_os)) { in zfs_id_overobjquota()
972 if (dmu_objset_projectquota_upgradable(zfsvfs->z_os)) { in zfs_id_overobjquota()
974 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overobjquota()
975 dmu_objset_id_quota_upgrade(zfsvfs->z_os); in zfs_id_overobjquota()
977 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overobjquota()
981 quotaobj = zfsvfs->z_projectobjquota_obj; in zfs_id_overobjquota()
983 quotaobj = zfsvfs->z_userobjquota_obj; in zfs_id_overobjquota()
985 quotaobj = zfsvfs->z_groupobjquota_obj; in zfs_id_overobjquota()
989 if (quotaobj == 0 || zfsvfs->z_replay) in zfs_id_overobjquota()
993 err = zap_lookup(zfsvfs->z_os, quotaobj, buf, 8, 1, "a); in zfs_id_overobjquota()
998 err = zap_lookup(zfsvfs->z_os, usedobj, buf, 8, 1, &used); in zfs_id_overobjquota()
1005 zfs_id_overblockquota(zfsvfs_t *zfsvfs, uint64_t usedobj, uint64_t id) in zfs_id_overblockquota() argument
1012 if (!dmu_objset_projectquota_present(zfsvfs->z_os)) { in zfs_id_overblockquota()
1013 if (dmu_objset_projectquota_upgradable(zfsvfs->z_os)) { in zfs_id_overblockquota()
1015 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overblockquota()
1016 dmu_objset_id_quota_upgrade(zfsvfs->z_os); in zfs_id_overblockquota()
1018 dmu_objset_pool(zfsvfs->z_os), FTAG); in zfs_id_overblockquota()
1022 quotaobj = zfsvfs->z_projectquota_obj; in zfs_id_overblockquota()
1024 quotaobj = zfsvfs->z_userquota_obj; in zfs_id_overblockquota()
1026 quotaobj = zfsvfs->z_groupquota_obj; in zfs_id_overblockquota()
1030 if (quotaobj == 0 || zfsvfs->z_replay) in zfs_id_overblockquota()
1034 err = zap_lookup(zfsvfs->z_os, quotaobj, buf, 8, 1, "a); in zfs_id_overblockquota()
1038 err = zap_lookup(zfsvfs->z_os, usedobj, buf, 8, 1, &used); in zfs_id_overblockquota()
1045 zfs_id_overquota(zfsvfs_t *zfsvfs, uint64_t usedobj, uint64_t id) in zfs_id_overquota() argument
1047 return (zfs_id_overblockquota(zfsvfs, usedobj, id) || in zfs_id_overquota()
1048 zfs_id_overobjquota(zfsvfs, usedobj, id)); in zfs_id_overquota()
1057 zfsvfs_init(zfsvfs_t *zfsvfs, objset_t *os) in zfsvfs_init() argument
1062 zfsvfs->z_max_blksz = SPA_OLD_MAXBLOCKSIZE; in zfsvfs_init()
1063 zfsvfs->z_show_ctldir = ZFS_SNAPDIR_VISIBLE; in zfsvfs_init()
1064 zfsvfs->z_os = os; in zfsvfs_init()
1066 error = zfs_get_zplprop(os, ZFS_PROP_VERSION, &zfsvfs->z_version); in zfsvfs_init()
1069 if (zfsvfs->z_version > in zfsvfs_init()
1073 "this file system.", (u_longlong_t)zfsvfs->z_version, in zfsvfs_init()
1080 zfsvfs->z_norm = (int)val; in zfsvfs_init()
1085 zfsvfs->z_utf8 = (val != 0); in zfsvfs_init()
1090 zfsvfs->z_case = (uint_t)val; in zfsvfs_init()
1096 if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE || in zfsvfs_init()
1097 zfsvfs->z_case == ZFS_CASE_MIXED) in zfsvfs_init()
1098 zfsvfs->z_norm |= U8_TEXTPREP_TOUPPER; in zfsvfs_init()
1100 zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); in zfsvfs_init()
1101 zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); in zfsvfs_init()
1104 if (zfsvfs->z_use_sa) { in zfsvfs_init()
1113 &zfsvfs->z_attr_table); in zfsvfs_init()
1117 if (zfsvfs->z_version >= ZPL_VERSION_SA) in zfsvfs_init()
1121 &zfsvfs->z_root); in zfsvfs_init()
1124 ASSERT(zfsvfs->z_root != 0); in zfsvfs_init()
1127 &zfsvfs->z_unlinkedobj); in zfsvfs_init()
1133 8, 1, &zfsvfs->z_userquota_obj); in zfsvfs_init()
1135 zfsvfs->z_userquota_obj = 0; in zfsvfs_init()
1141 8, 1, &zfsvfs->z_groupquota_obj); in zfsvfs_init()
1143 zfsvfs->z_groupquota_obj = 0; in zfsvfs_init()
1149 8, 1, &zfsvfs->z_projectquota_obj); in zfsvfs_init()
1151 zfsvfs->z_projectquota_obj = 0; in zfsvfs_init()
1157 8, 1, &zfsvfs->z_userobjquota_obj); in zfsvfs_init()
1159 zfsvfs->z_userobjquota_obj = 0; in zfsvfs_init()
1165 8, 1, &zfsvfs->z_groupobjquota_obj); in zfsvfs_init()
1167 zfsvfs->z_groupobjquota_obj = 0; in zfsvfs_init()
1173 8, 1, &zfsvfs->z_projectobjquota_obj); in zfsvfs_init()
1175 zfsvfs->z_projectobjquota_obj = 0; in zfsvfs_init()
1180 &zfsvfs->z_fuid_obj); in zfsvfs_init()
1182 zfsvfs->z_fuid_obj = 0; in zfsvfs_init()
1187 &zfsvfs->z_shares_dir); in zfsvfs_init()
1189 zfsvfs->z_shares_dir = 0; in zfsvfs_init()
1200 zfsvfs_t *zfsvfs; in zfsvfs_create() local
1204 zfsvfs = kmem_zalloc(sizeof (zfsvfs_t), KM_SLEEP); in zfsvfs_create()
1206 error = dmu_objset_own(osname, DMU_OST_ZFS, ro, B_TRUE, zfsvfs, &os); in zfsvfs_create()
1208 kmem_free(zfsvfs, sizeof (zfsvfs_t)); in zfsvfs_create()
1212 error = zfsvfs_create_impl(zfvp, zfsvfs, os); in zfsvfs_create()
1214 dmu_objset_disown(os, B_TRUE, zfsvfs); in zfsvfs_create()
1221 zfsvfs_create_impl(zfsvfs_t **zfvp, zfsvfs_t *zfsvfs, objset_t *os) in zfsvfs_create_impl() argument
1225 zfsvfs->z_vfs = NULL; in zfsvfs_create_impl()
1226 zfsvfs->z_parent = zfsvfs; in zfsvfs_create_impl()
1228 mutex_init(&zfsvfs->z_znodes_lock, NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
1229 mutex_init(&zfsvfs->z_lock, NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
1230 list_create(&zfsvfs->z_all_znodes, sizeof (znode_t), in zfsvfs_create_impl()
1232 rrm_init(&zfsvfs->z_teardown_lock, B_FALSE); in zfsvfs_create_impl()
1233 rw_init(&zfsvfs->z_teardown_inactive_lock, NULL, RW_DEFAULT, NULL); in zfsvfs_create_impl()
1234 rw_init(&zfsvfs->z_fuid_lock, NULL, RW_DEFAULT, NULL); in zfsvfs_create_impl()
1236 mutex_init(&zfsvfs->z_hold_mtx[i], NULL, MUTEX_DEFAULT, NULL); in zfsvfs_create_impl()
1238 error = zfsvfs_init(zfsvfs, os); in zfsvfs_create_impl()
1241 kmem_free(zfsvfs, sizeof (zfsvfs_t)); in zfsvfs_create_impl()
1245 zfsvfs->z_drain_task = TASKQID_INVALID; in zfsvfs_create_impl()
1246 zfsvfs->z_draining = B_FALSE; in zfsvfs_create_impl()
1247 zfsvfs->z_drain_cancel = B_TRUE; in zfsvfs_create_impl()
1249 *zfvp = zfsvfs; in zfsvfs_create_impl()
1254 zfsvfs_setup(zfsvfs_t *zfsvfs, boolean_t mounting) in zfsvfs_setup() argument
1258 error = zfs_register_callbacks(zfsvfs->z_vfs); in zfsvfs_setup()
1262 zfsvfs->z_log = zil_open(zfsvfs->z_os, zfs_get_data); in zfsvfs_setup()
1276 readonly = zfsvfs->z_vfs->vfs_flag & VFS_RDONLY; in zfsvfs_setup()
1278 zfsvfs->z_vfs->vfs_flag &= ~VFS_RDONLY; in zfsvfs_setup()
1280 zfs_unlinked_drain(zfsvfs); in zfsvfs_setup()
1310 if (spa_writeable(dmu_objset_spa(zfsvfs->z_os))) { in zfsvfs_setup()
1312 zil_destroy(zfsvfs->z_log, B_FALSE); in zfsvfs_setup()
1314 zfsvfs->z_replay = B_TRUE; in zfsvfs_setup()
1315 zil_replay(zfsvfs->z_os, zfsvfs, in zfsvfs_setup()
1317 zfsvfs->z_replay = B_FALSE; in zfsvfs_setup()
1323 zfsvfs->z_vfs->vfs_flag |= VFS_RDONLY; in zfsvfs_setup()
1329 mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); in zfsvfs_setup()
1330 dmu_objset_set_user(zfsvfs->z_os, zfsvfs); in zfsvfs_setup()
1331 mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); in zfsvfs_setup()
1337 zfsvfs_free(zfsvfs_t *zfsvfs) in zfsvfs_free() argument
1351 zfs_fuid_destroy(zfsvfs); in zfsvfs_free()
1353 mutex_destroy(&zfsvfs->z_znodes_lock); in zfsvfs_free()
1354 mutex_destroy(&zfsvfs->z_lock); in zfsvfs_free()
1355 list_destroy(&zfsvfs->z_all_znodes); in zfsvfs_free()
1356 rrm_destroy(&zfsvfs->z_teardown_lock); in zfsvfs_free()
1357 rw_destroy(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_free()
1358 rw_destroy(&zfsvfs->z_fuid_lock); in zfsvfs_free()
1360 mutex_destroy(&zfsvfs->z_hold_mtx[i]); in zfsvfs_free()
1361 kmem_free(zfsvfs, sizeof (zfsvfs_t)); in zfsvfs_free()
1365 zfs_set_fuid_feature(zfsvfs_t *zfsvfs) in zfs_set_fuid_feature() argument
1367 zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os); in zfs_set_fuid_feature()
1368 if (zfsvfs->z_vfs) { in zfs_set_fuid_feature()
1369 if (zfsvfs->z_use_fuids) { in zfs_set_fuid_feature()
1370 vfs_set_feature(zfsvfs->z_vfs, VFSFT_XVATTR); in zfs_set_fuid_feature()
1371 vfs_set_feature(zfsvfs->z_vfs, VFSFT_SYSATTR_VIEWS); in zfs_set_fuid_feature()
1372 vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACEMASKONACCESS); in zfs_set_fuid_feature()
1373 vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACLONCREATE); in zfs_set_fuid_feature()
1374 vfs_set_feature(zfsvfs->z_vfs, VFSFT_ACCESS_FILTER); in zfs_set_fuid_feature()
1375 vfs_set_feature(zfsvfs->z_vfs, VFSFT_REPARSE); in zfs_set_fuid_feature()
1377 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_XVATTR); in zfs_set_fuid_feature()
1378 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_SYSATTR_VIEWS); in zfs_set_fuid_feature()
1379 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACEMASKONACCESS); in zfs_set_fuid_feature()
1380 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACLONCREATE); in zfs_set_fuid_feature()
1381 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_ACCESS_FILTER); in zfs_set_fuid_feature()
1382 vfs_clear_feature(zfsvfs->z_vfs, VFSFT_REPARSE); in zfs_set_fuid_feature()
1385 zfsvfs->z_use_sa = USE_SA(zfsvfs->z_version, zfsvfs->z_os); in zfs_set_fuid_feature()
1394 zfsvfs_t *zfsvfs; in zfs_domount() local
1400 error = zfsvfs_create(osname, readonly, &zfsvfs); in zfs_domount()
1403 zfsvfs->z_vfs = vfsp; in zfs_domount()
1423 vfsp->vfs_data = zfsvfs; in zfs_domount()
1433 fsid_guid = dmu_objset_fsid_guid(zfsvfs->z_os); in zfs_domount()
1442 zfs_set_fuid_feature(zfsvfs); in zfs_domount()
1443 if (zfsvfs->z_case == ZFS_CASE_INSENSITIVE) { in zfs_domount()
1447 } else if (zfsvfs->z_case == ZFS_CASE_MIXED) { in zfs_domount()
1453 if (dmu_objset_is_snapshot(zfsvfs->z_os)) { in zfs_domount()
1456 atime_changed_cb(zfsvfs, B_FALSE); in zfs_domount()
1457 readonly_changed_cb(zfsvfs, B_TRUE); in zfs_domount()
1460 xattr_changed_cb(zfsvfs, pval); in zfs_domount()
1461 zfsvfs->z_issnap = B_TRUE; in zfs_domount()
1462 zfsvfs->z_os->os_sync = ZFS_SYNC_DISABLED; in zfs_domount()
1464 mutex_enter(&zfsvfs->z_os->os_user_ptr_lock); in zfs_domount()
1465 dmu_objset_set_user(zfsvfs->z_os, zfsvfs); in zfs_domount()
1466 mutex_exit(&zfsvfs->z_os->os_user_ptr_lock); in zfs_domount()
1468 error = zfsvfs_setup(zfsvfs, B_TRUE); in zfs_domount()
1473 if (error = zfs_zget(zfsvfs, zfsvfs->z_root, &rootzp)) { in zfs_domount()
1476 zfsvfs->z_rootdir = ZTOV(rootzp); in zfs_domount()
1478 if (!zfsvfs->z_issnap) in zfs_domount()
1479 zfsctl_create(zfsvfs); in zfs_domount()
1482 dmu_objset_disown(zfsvfs->z_os, B_TRUE, zfsvfs); in zfs_domount()
1483 zfsvfs_free(zfsvfs); in zfs_domount()
1492 zfs_unregister_callbacks(zfsvfs_t *zfsvfs) in zfs_unregister_callbacks() argument
1494 objset_t *os = zfsvfs->z_os; in zfs_unregister_callbacks()
1497 dsl_prop_unregister_all(dmu_objset_ds(os), zfsvfs); in zfs_unregister_callbacks()
1583 zfs_statfs_project(zfsvfs_t *zfsvfs, znode_t *zp, struct statvfs64 *statp, in zfs_statfs_project() argument
1595 err = id_to_fuidstr(zfsvfs, NULL, zp->z_projid, &ils, B_FALSE); in zfs_statfs_project()
1600 if (zfsvfs->z_projectquota_obj == 0) in zfs_statfs_project()
1603 err = zap_lookup(zfsvfs->z_os, zfsvfs->z_projectquota_obj, in zfs_statfs_project()
1610 err = zap_lookup(zfsvfs->z_os, DMU_PROJECTUSED_OBJECT, in zfs_statfs_project()
1622 blksize = zfsvfs->z_max_blksz; in zfs_statfs_project()
1634 if (zfsvfs->z_projectobjquota_obj == 0) in zfs_statfs_project()
1637 err = zap_lookup(zfsvfs->z_os, zfsvfs->z_projectobjquota_obj, in zfs_statfs_project()
1644 err = zap_lookup(zfsvfs->z_os, DMU_PROJECTUSED_OBJECT, in zfs_statfs_project()
1800 zfsvfs_t *zfsvfs = NULL; in zfs_mountroot() local
1896 zfsvfs = (zfsvfs_t *)vfsp->vfs_data; in zfs_mountroot()
1897 ASSERT(zfsvfs); in zfs_mountroot()
1898 ASSERT(zfsvfs->z_rootdir); in zfs_mountroot()
1900 vp = zfsvfs->z_rootdir; in zfs_mountroot()
2052 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_statvfs() local
2057 ZFS_ENTER(zfsvfs); in zfs_statvfs()
2059 dmu_objset_space(zfsvfs->z_os, in zfs_statvfs()
2068 statp->f_bsize = zfsvfs->z_max_blksz; in zfs_statvfs()
2110 if (dmu_objset_projectquota_enabled(zfsvfs->z_os) && in zfs_statvfs()
2111 dmu_objset_projectquota_present(zfsvfs->z_os)) { in zfs_statvfs()
2124 if (zfs_zget(zfsvfs, zfsvfs->z_root, &zp) == 0) { in zfs_statvfs()
2129 err = zfs_statfs_project(zfsvfs, zp, statp, in zfs_statvfs()
2135 ZFS_EXIT(zfsvfs); in zfs_statvfs()
2142 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_root() local
2146 ZFS_ENTER(zfsvfs); in zfs_root()
2148 vp = zfsvfs->z_rootdir; in zfs_root()
2158 ZFS_EXIT(zfsvfs); in zfs_root()
2170 zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting) in zfsvfs_teardown() argument
2174 zfs_unlinked_drain_stop_wait(zfsvfs); in zfsvfs_teardown()
2176 rrm_enter(&zfsvfs->z_teardown_lock, RW_WRITER, FTAG); in zfsvfs_teardown()
2185 (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0); in zfsvfs_teardown()
2192 if (zfsvfs->z_log) { in zfsvfs_teardown()
2193 zil_close(zfsvfs->z_log); in zfsvfs_teardown()
2194 zfsvfs->z_log = NULL; in zfsvfs_teardown()
2197 rw_enter(&zfsvfs->z_teardown_inactive_lock, RW_WRITER); in zfsvfs_teardown()
2204 if (!unmounting && (zfsvfs->z_unmounted || zfsvfs->z_os == NULL)) { in zfsvfs_teardown()
2205 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_teardown()
2206 rrm_exit(&zfsvfs->z_teardown_lock, FTAG); in zfsvfs_teardown()
2217 mutex_enter(&zfsvfs->z_znodes_lock); in zfsvfs_teardown()
2218 for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL; in zfsvfs_teardown()
2219 zp = list_next(&zfsvfs->z_all_znodes, zp)) in zfsvfs_teardown()
2224 mutex_exit(&zfsvfs->z_znodes_lock); in zfsvfs_teardown()
2237 vnode_t *vp = zfsvfs->z_rootdir; in zfsvfs_teardown()
2238 zfsvfs->z_rootdir = NULL; in zfsvfs_teardown()
2240 zfsvfs->z_unmounted = B_TRUE; in zfsvfs_teardown()
2241 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfsvfs_teardown()
2242 rrm_exit(&zfsvfs->z_teardown_lock, FTAG); in zfsvfs_teardown()
2253 if (zfsvfs->z_os == NULL) in zfsvfs_teardown()
2259 zfs_unregister_callbacks(zfsvfs); in zfsvfs_teardown()
2264 if (dsl_dataset_is_dirty(dmu_objset_ds(zfsvfs->z_os)) && in zfsvfs_teardown()
2265 !(zfsvfs->z_vfs->vfs_flag & VFS_RDONLY)) in zfsvfs_teardown()
2266 txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); in zfsvfs_teardown()
2267 dmu_objset_evict_dbufs(zfsvfs->z_os); in zfsvfs_teardown()
2276 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_umount() local
2293 (void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0); in zfs_umount()
2299 if (zfsvfs->z_ctldir != NULL && in zfs_umount()
2319 rvp = zfsvfs->z_rootdir; in zfs_umount()
2327 ctlvp = zfsvfs->z_ctldir; in zfs_umount()
2337 draining = zfsvfs->z_draining; in zfs_umount()
2339 zfs_unlinked_drain_stop_wait(zfsvfs); in zfs_umount()
2345 zfs_unlinked_drain(zfsvfs); in zfs_umount()
2353 VERIFY(zfsvfs_teardown(zfsvfs, B_TRUE) == 0); in zfs_umount()
2354 os = zfsvfs->z_os; in zfs_umount()
2371 dmu_objset_disown(os, B_TRUE, zfsvfs); in zfs_umount()
2377 if (zfsvfs->z_ctldir != NULL) in zfs_umount()
2378 zfsctl_destroy(zfsvfs); in zfs_umount()
2386 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_vget() local
2396 ZFS_ENTER(zfsvfs); in zfs_vget()
2409 ZFS_EXIT(zfsvfs); in zfs_vget()
2411 err = zfsctl_lookup_objset(vfsp, objsetid, &zfsvfs); in zfs_vget()
2414 ZFS_ENTER(zfsvfs); in zfs_vget()
2426 ZFS_EXIT(zfsvfs); in zfs_vget()
2433 *vpp = zfsvfs->z_ctldir; in zfs_vget()
2441 ZFS_EXIT(zfsvfs); in zfs_vget()
2448 if (err = zfs_zget(zfsvfs, object, &zp)) { in zfs_vget()
2449 ZFS_EXIT(zfsvfs); in zfs_vget()
2452 (void) sa_lookup(zp->z_sa_hdl, SA_ZPL_GEN(zfsvfs), &zp_gen, in zfs_vget()
2460 ZFS_EXIT(zfsvfs); in zfs_vget()
2465 ZFS_EXIT(zfsvfs); in zfs_vget()
2478 zfs_suspend_fs(zfsvfs_t *zfsvfs) in zfs_suspend_fs() argument
2482 if ((error = zfsvfs_teardown(zfsvfs, B_FALSE)) != 0) in zfs_suspend_fs()
2496 zfs_resume_fs(zfsvfs_t *zfsvfs, dsl_dataset_t *ds) in zfs_resume_fs() argument
2501 ASSERT(RRM_WRITE_HELD(&zfsvfs->z_teardown_lock)); in zfs_resume_fs()
2502 ASSERT(RW_WRITE_HELD(&zfsvfs->z_teardown_inactive_lock)); in zfs_resume_fs()
2509 VERIFY3P(ds->ds_owner, ==, zfsvfs); in zfs_resume_fs()
2513 err = zfsvfs_init(zfsvfs, os); in zfs_resume_fs()
2517 VERIFY(zfsvfs_setup(zfsvfs, B_FALSE) == 0); in zfs_resume_fs()
2519 zfs_set_fuid_feature(zfsvfs); in zfs_resume_fs()
2527 mutex_enter(&zfsvfs->z_znodes_lock); in zfs_resume_fs()
2528 for (zp = list_head(&zfsvfs->z_all_znodes); zp; in zfs_resume_fs()
2529 zp = list_next(&zfsvfs->z_all_znodes, zp)) { in zfs_resume_fs()
2532 mutex_exit(&zfsvfs->z_znodes_lock); in zfs_resume_fs()
2534 if (((zfsvfs->z_vfs->vfs_flag & VFS_RDONLY) == 0) && in zfs_resume_fs()
2535 !zfsvfs->z_unmounted) { in zfs_resume_fs()
2541 zfs_unlinked_drain(zfsvfs); in zfs_resume_fs()
2546 rw_exit(&zfsvfs->z_teardown_inactive_lock); in zfs_resume_fs()
2547 rrm_exit(&zfsvfs->z_teardown_lock, FTAG); in zfs_resume_fs()
2554 if (vn_vfswlock(zfsvfs->z_vfs->vfs_vnodecovered) == 0) in zfs_resume_fs()
2555 (void) dounmount(zfsvfs->z_vfs, MS_FORCE, CRED()); in zfs_resume_fs()
2563 zfsvfs_t *zfsvfs = vfsp->vfs_data; in zfs_freevfs() local
2571 if (zfsvfs->z_issnap && (vfsp != rootvfs)) in zfs_freevfs()
2572 VFS_RELE(zfsvfs->z_parent->z_vfs); in zfs_freevfs()
2574 zfsvfs_free(zfsvfs); in zfs_freevfs()
2651 zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers) in zfs_set_version() argument
2654 objset_t *os = zfsvfs->z_os; in zfs_set_version()
2660 if (newvers < zfsvfs->z_version) in zfs_set_version()
2664 spa_version(dmu_objset_spa(zfsvfs->z_os))) in zfs_set_version()
2669 if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { in zfs_set_version()
2688 if (newvers >= ZPL_VERSION_SA && !zfsvfs->z_use_sa) { in zfs_set_version()
2691 ASSERT3U(spa_version(dmu_objset_spa(zfsvfs->z_os)), >=, in zfs_set_version()
2705 "from %llu to %llu", zfsvfs->z_version, newvers); in zfs_set_version()
2709 zfsvfs->z_version = newvers; in zfs_set_version()
2712 zfs_set_fuid_feature(zfsvfs); in zfs_set_version()