Lines Matching defs:mp
155 struct mount *mp;
158 mp = kmem_zalloc(sizeof(*mp), KM_SLEEP);
159 mp->mnt_op = vfsops;
160 mp->mnt_refcnt = 1;
161 TAILQ_INIT(&mp->mnt_vnodelist);
162 mp->mnt_renamelock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
163 mp->mnt_vnodelock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
164 mp->mnt_updating = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
165 mp->mnt_vnodecovered = vp;
166 mount_initspecific(mp);
168 error = fstrans_mount(mp);
172 mp->mnt_gen = mountgen++;
175 return mp;
189 struct mount *mp;
195 sizeof(mp->mnt_stat.f_fstypename)))
204 if ((mp = vfs_mountalloc(vfsp, NULL)) == NULL)
206 error = vfs_busy(mp);
208 mp->mnt_flag = MNT_RDONLY;
209 (void)strlcpy(mp->mnt_stat.f_fstypename, vfsp->vfs_name,
210 sizeof(mp->mnt_stat.f_fstypename));
211 mp->mnt_stat.f_mntonname[0] = '/';
212 mp->mnt_stat.f_mntonname[1] = '\0';
213 mp->mnt_stat.f_mntfromname[sizeof(mp->mnt_stat.f_mntfromname) - 1] =
215 (void)copystr(devname, mp->mnt_stat.f_mntfromname,
216 sizeof(mp->mnt_stat.f_mntfromname) - 1, 0);
217 *mpp = mp;
225 vfs_getnewfsid(struct mount *mp)
235 mtype = makefstype(mp->mnt_op->vfs_name);
261 mp->mnt_stat.f_fsidx.__fsid_val[0] = tfsid.__fsid_val[0];
262 mp->mnt_stat.f_fsidx.__fsid_val[1] = tfsid.__fsid_val[1];
263 mp->mnt_stat.f_fsid = mp->mnt_stat.f_fsidx.__fsid_val[0];
276 struct mount *mp;
279 while ((mp = mountlist_iterator_next(iter)) != NULL) {
280 if (mp->mnt_stat.f_fsidx.__fsid_val[0] == fsid->__fsid_val[0] &&
281 mp->mnt_stat.f_fsidx.__fsid_val[1] == fsid->__fsid_val[1]) {
283 return mp;
294 vfs_ref(struct mount *mp)
297 KASSERT(mp->mnt_refcnt > 0 || mutex_owned(&mountlist_lock));
299 atomic_inc_uint(&mp->mnt_refcnt);
306 vfs_rele(struct mount *mp)
310 if (__predict_true((int)atomic_dec_uint_nv(&mp->mnt_refcnt) > 0)) {
319 KASSERT(mp->mnt_refcnt == 0);
320 specificdata_fini(mount_specificdata_domain, &mp->mnt_specdataref);
321 mutex_obj_free(mp->mnt_updating);
322 mutex_obj_free(mp->mnt_renamelock);
323 mutex_obj_free(mp->mnt_vnodelock);
324 if (mp->mnt_op != NULL) {
325 vfs_delref(mp->mnt_op);
327 fstrans_unmount(mp);
329 * Final free of mp gets done from fstrans_mount_dtor().
347 _vfs_busy(struct mount *mp, bool wait)
350 KASSERT(mp->mnt_refcnt > 0);
353 fstrans_start(mp);
355 if (fstrans_start_nowait(mp))
358 if (__predict_false((mp->mnt_iflag & IMNT_GONE) != 0)) {
359 fstrans_done(mp);
362 vfs_ref(mp);
367 vfs_busy(struct mount *mp)
370 return _vfs_busy(mp, true);
374 vfs_trybusy(struct mount *mp)
377 return _vfs_busy(mp, false);
386 vfs_unbusy(struct mount *mp)
389 KASSERT(mp->mnt_refcnt > 0);
391 fstrans_done(mp);
392 vfs_rele(mp);
402 vfs_set_lowermount(struct mount *mp, struct mount *lowermp)
430 oldlowermp = mp->mnt_lower;
431 mp->mnt_lower = lowermp;
447 vfs_vnode_iterator_init(struct mount *mp, struct vnode_iterator **vnip)
452 vp = vnalloc_marker(mp);
455 mutex_enter(mp->mnt_vnodelock);
456 TAILQ_INSERT_HEAD(&mp->mnt_vnodelist, vip, vi_mntvnodes);
458 mutex_exit(mp->mnt_vnodelock);
486 struct mount *mp = VIMPL_TO_VNODE(mvip)->v_mount;
494 lock = mp->mnt_vnodelock;
498 TAILQ_REMOVE(&mp->mnt_vnodelist, mvip, vi_mntvnodes);
516 TAILQ_INSERT_AFTER(&mp->mnt_vnodelist, vip, mvip,
539 vfs_insmntque(vnode_t *vp, struct mount *mp)
545 KASSERT(mp == NULL || (mp->mnt_iflag & IMNT_UNMOUNT) == 0 ||
563 if ((vp->v_mount = mp) != NULL) {
564 lock = mp->mnt_vnodelock;
566 TAILQ_INSERT_TAIL(&mp->mnt_vnodelist, vip, vi_mntvnodes);
577 * Remove any vnodes in the vnode table belonging to mount point mp.
671 vflush(struct mount *mp, vnode_t *skipvp, int flags)
684 vrele_flush(mp);
686 vfs_vnode_iterator_init(mp, &marker);
789 start_extattr(struct mount *mp)
793 error = VFS_EXTATTRCTL(mp, EXTATTR_CMD_START, NULL, 0, NULL);
796 mp->mnt_stat.f_mntonname, error);
806 struct mount *mp;
829 if ((mp = vfs_mountalloc(vfsops, vp)) == NULL) {
834 mp->mnt_stat.f_owner = kauth_cred_geteuid(l->l_cred);
842 mp->mnt_flag = flags & (MNT_BASIC_FLAGS | MNT_FORCE | MNT_IGNORE);
844 error = VFS_MOUNT(mp, path, data, data_len);
845 mp->mnt_flag &= ~MNT_OP_FLAGS;
848 vfs_rele(mp);
854 error2 = vfs_suspend(mp, 0);
857 mutex_enter(mp->mnt_updating);
892 mp->mnt_iflag &= ~IMNT_WANTRDWR;
894 mountlist_append(mp);
895 if ((mp->mnt_flag & (MNT_RDONLY | MNT_ASYNC)) == 0)
896 vfs_syncer_add_to_worklist(mp);
897 vp->v_mountedhere = mp;
901 mutex_exit(mp->mnt_updating);
903 vfs_resume(mp);
906 vfs_ref(mp);
907 (void) VFS_STATVFS(mp, &mp->mnt_stat);
908 error = VFS_START(mp, 0);
912 if (start_extattr(mp) != 0)
913 mp->mnt_flag &= ~MNT_EXTATTR;
916 vfs_rele(mp);
921 if (VFS_UNMOUNT(mp, MNT_FORCE) != 0)
923 mutex_exit(mp->mnt_updating);
925 vfs_resume(mp);
926 vfs_set_lowermount(mp, NULL);
927 vfs_rele(mp);
939 dounmount(struct mount *mp, int flags, struct lwp *l)
944 const bool was_suspended = fstrans_is_owner(mp);
947 error = veriexec_unmountchk(mp);
953 error = vfs_suspend(mp, 0);
959 KASSERT((mp->mnt_iflag & IMNT_GONE) == 0);
961 used_syncer = (mp->mnt_iflag & IMNT_ONWORKLIST) != 0;
962 used_extattr = mp->mnt_flag & MNT_EXTATTR;
964 mp->mnt_iflag |= IMNT_UNMOUNT;
965 mutex_enter(mp->mnt_updating);
970 async = mp->mnt_flag & MNT_ASYNC;
971 mp->mnt_flag &= ~MNT_ASYNC;
972 cache_purgevfs(mp); /* remove cache entries for this file sys */
974 vfs_syncer_remove_from_worklist(mp);
976 if (((mp->mnt_flag & MNT_RDONLY) == 0) && ((flags & MNT_FORCE) == 0)) {
977 error = VFS_SYNC(mp, MNT_WAIT, l->l_cred);
980 error = VFS_UNMOUNT(mp, flags);
983 mp->mnt_iflag &= ~IMNT_UNMOUNT;
984 mp->mnt_flag |= async;
985 if ((mp->mnt_flag & (MNT_RDONLY | MNT_ASYNC)) == 0)
986 vfs_syncer_add_to_worklist(mp);
987 mutex_exit(mp->mnt_updating);
989 vfs_resume(mp);
991 if (start_extattr(mp) != 0)
992 mp->mnt_flag &= ~MNT_EXTATTR;
994 mp->mnt_flag |= MNT_EXTATTR;
998 mutex_exit(mp->mnt_updating);
1005 mp->mnt_iflag |= IMNT_GONE;
1006 if ((coveredvp = mp->mnt_vnodecovered) != NULLVP) {
1010 vfs_resume(mp);
1012 mountlist_remove(mp);
1014 if ((vip = TAILQ_FIRST(&mp->mnt_vnodelist)) != NULL) {
1019 vfs_hooks_unmount(mp);
1021 vfs_set_lowermount(mp, NULL);
1022 vfs_rele(mp); /* reference from mount() */
1043 vfs_unmount_print(struct mount *mp, const char *pfx)
1047 mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname,
1048 mp->mnt_stat.f_fstypename);
1058 struct mount *mp, *nmp;
1063 while ((mp = mountlist_iterator_next(iter)) != NULL) {
1064 if ((nmp == NULL || mp->mnt_gen > nmp->mnt_gen) &&
1065 mp->mnt_gen < gen) {
1068 nmp = mp;
1080 struct mount *mp;
1083 mp = vfs_unmount_next(mountgen);
1084 if (mp == NULL) {
1090 mp->mnt_stat.f_mntonname, mp->mnt_stat.f_mntfromname);
1092 if ((error = dounmount(mp, MNT_FORCE, l)) == 0) {
1093 vfs_unmount_print(mp, "forcefully ");
1096 vfs_rele(mp);
1101 mp->mnt_stat.f_mntonname, error);
1110 struct mount *mp;
1118 mp = vfs_unmount_next(gen);
1119 if (mp == NULL)
1121 gen = mp->mnt_gen;
1125 (void *)mp, mp->mnt_stat.f_mntonname,
1126 mp->mnt_stat.f_mntfromname);
1128 if ((error = dounmount(mp, force ? MNT_FORCE : 0, l)) == 0) {
1129 vfs_unmount_print(mp, "");
1132 vfs_rele(mp);
1135 mp->mnt_stat.f_mntonname, error);
1335 struct mount *mp;
1338 mp = mountlist_iterator_next(iter);
1339 KASSERT(mp != NULL);
1342 mp->mnt_flag |= MNT_ROOTFS;
1343 mp->mnt_op->vfs_refcount++;
1350 error = VFS_ROOT(mp, LK_NONE, &rootvnode);
1400 mount_initspecific(struct mount *mp)
1405 &mp->mnt_specdataref);
1414 mount_finispecific(struct mount *mp)
1417 specificdata_fini(mount_specificdata_domain, &mp->mnt_specdataref);
1425 mount_getspecific(struct mount *mp, specificdata_key_t key)
1429 &mp->mnt_specdataref, key);
1437 mount_setspecific(struct mount *mp, specificdata_key_t key, void *data)
1441 &mp->mnt_specdataref, key, data);
1560 mountlist_alloc(enum mountlist_type type, struct mount *mp)
1565 me->me_mount = mp;
1614 struct mount *mp;
1640 mp = me->me_mount;
1641 KASSERT(mp != NULL);
1642 vfs_ref(mp);
1647 error = vfs_busy(mp);
1649 error = vfs_trybusy(mp);
1651 vfs_rele(mp);
1652 marker->me_mount = mp;
1653 return mp;
1655 vfs_rele(mp);
1678 mountlist_append(struct mount *mp)
1682 me = mountlist_alloc(ME_MOUNT, mp);
1692 mountlist_remove(struct mount *mp)
1698 if (me->me_type == ME_MOUNT && me->me_mount == mp)
1711 _mountlist_next(struct mount *mp)
1715 if (mp == NULL) {
1719 if (me->me_type == ME_MOUNT && me->me_mount == mp)