+
+ /*
+ * Initialize the vnop authorization scope.
+ */
+ vnode_authorize_init();
+
+ /*
+ * Initialiize the quota system.
+ */
+#if QUOTA
+ dqinit();
+#endif
+
+ /*
+ * create a mount point for dead vnodes
+ */
+ MALLOC_ZONE(mp, struct mount *, (u_long)sizeof(struct mount),
+ M_MOUNT, M_WAITOK);
+ bzero((char *)mp, (u_long)sizeof(struct mount));
+ /* Initialize the default IO constraints */
+ mp->mnt_maxreadcnt = mp->mnt_maxwritecnt = MAXPHYS;
+ mp->mnt_segreadcnt = mp->mnt_segwritecnt = 32;
+ mp->mnt_maxsegreadsize = mp->mnt_maxreadcnt;
+ mp->mnt_maxsegwritesize = mp->mnt_maxwritecnt;
+ mp->mnt_devblocksize = DEV_BSIZE;
+ mp->mnt_alignmentmask = PAGE_MASK;
+ mp->mnt_ioflags = 0;
+ mp->mnt_realrootvp = NULLVP;
+ mp->mnt_authcache_ttl = CACHED_LOOKUP_RIGHT_TTL;
+
+ TAILQ_INIT(&mp->mnt_vnodelist);
+ TAILQ_INIT(&mp->mnt_workerqueue);
+ TAILQ_INIT(&mp->mnt_newvnodes);
+ mp->mnt_flag = MNT_LOCAL;
+ mp->mnt_lflag = MNT_LDEAD;
+ mount_lock_init(mp);
+
+#if CONFIG_MACF
+ mac_mount_label_init(mp);
+ mac_mount_label_associate(vfs_context_kernel(), mp);
+#endif
+ dead_mountp = mp;
+}
+
+void
+vnode_list_lock(void)
+{
+ lck_spin_lock(vnode_list_spin_lock);
+}
+
+void
+vnode_list_unlock(void)
+{
+ lck_spin_unlock(vnode_list_spin_lock);
+}
+
+void
+mount_list_lock(void)
+{
+ lck_mtx_lock(mnt_list_mtx_lock);
+}
+
+void
+mount_list_unlock(void)
+{
+ lck_mtx_unlock(mnt_list_mtx_lock);
+}
+
+void
+mount_lock_init(mount_t mp)
+{
+ lck_mtx_init(&mp->mnt_mlock, mnt_lck_grp, mnt_lck_attr);
+ lck_mtx_init(&mp->mnt_renamelock, mnt_lck_grp, mnt_lck_attr);
+ lck_rw_init(&mp->mnt_rwlock, mnt_lck_grp, mnt_lck_attr);