Lines Matching refs:mp

207 static void insmntque(vnode_t vp, mount_t mp);
498 vnode_iterate_setup(mount_t mp)
500 while (mp->mnt_lflag & MNT_LITER) {
501 mp->mnt_lflag |= MNT_LITERWAIT;
502 msleep((caddr_t)mp, &mp->mnt_mlock, PVFS, "vnode_iterate_setup", NULL);
505 mp->mnt_lflag |= MNT_LITER;
510 vnode_umount_preflight(mount_t mp, vnode_t skipvp, int flags)
514 TAILQ_FOREACH(vp, &mp->mnt_vnodelist, v_mntvnodes) {
544 vnode_iterate_prepare(mount_t mp)
548 if (TAILQ_EMPTY(&mp->mnt_vnodelist)) {
553 vp = TAILQ_FIRST(&mp->mnt_vnodelist);
554 vp->v_mntvnodes.tqe_prev = &(mp->mnt_workerqueue.tqh_first);
555 mp->mnt_workerqueue.tqh_first = mp->mnt_vnodelist.tqh_first;
556 mp->mnt_workerqueue.tqh_last = mp->mnt_vnodelist.tqh_last;
558 TAILQ_INIT(&mp->mnt_vnodelist);
559 if (mp->mnt_newvnodes.tqh_first != NULL)
561 TAILQ_INIT(&mp->mnt_newvnodes);
569 vnode_iterate_reloadq(mount_t mp)
574 if (!TAILQ_EMPTY(&mp->mnt_workerqueue)) {
576 mvp = TAILQ_LAST(&mp->mnt_vnodelist, vnodelst);
580 mvp->v_mntvnodes.tqe_next = mp->mnt_workerqueue.tqh_first;
582 mp->mnt_vnodelist.tqh_first = mp->mnt_workerqueue.tqh_first;
583 mp->mnt_workerqueue.tqh_first->v_mntvnodes.tqe_prev = mp->mnt_vnodelist.tqh_last;
584 mp->mnt_vnodelist.tqh_last = mp->mnt_workerqueue.tqh_last;
585 TAILQ_INIT(&mp->mnt_workerqueue);
589 if (!TAILQ_EMPTY(&mp->mnt_newvnodes)) {
591 nlvp = TAILQ_LAST(&mp->mnt_newvnodes, vnodelst);
593 mp->mnt_newvnodes.tqh_first->v_mntvnodes.tqe_prev = &mp->mnt_vnodelist.tqh_first;
594 nlvp->v_mntvnodes.tqe_next = mp->mnt_vnodelist.tqh_first;
595 if(mp->mnt_vnodelist.tqh_first)
596 mp->mnt_vnodelist.tqh_first->v_mntvnodes.tqe_prev = &nlvp->v_mntvnodes.tqe_next;
598 mp->mnt_vnodelist.tqh_last = mp->mnt_newvnodes.tqh_last;
599 mp->mnt_vnodelist.tqh_first = mp->mnt_newvnodes.tqh_first;
600 TAILQ_INIT(&mp->mnt_newvnodes);
609 vnode_iterate_clear(mount_t mp)
611 mp->mnt_lflag &= ~MNT_LITER;
612 if (mp->mnt_lflag & MNT_LITERWAIT) {
613 mp->mnt_lflag &= ~MNT_LITERWAIT;
614 wakeup(mp);
620 vnode_iterate(mount_t mp, int flags, int (*callout)(struct vnode *, void *),
627 mount_lock(mp);
629 vnode_iterate_setup(mp);
632 retval = vnode_iterate_prepare(mp);
635 vnode_iterate_clear(mp);
636 mount_unlock(mp);
641 while (!TAILQ_EMPTY(&mp->mnt_workerqueue)) {
642 vp = TAILQ_FIRST(&mp->mnt_workerqueue);
643 TAILQ_REMOVE(&mp->mnt_workerqueue, vp, v_mntvnodes);
644 TAILQ_INSERT_TAIL(&mp->mnt_vnodelist, vp, v_mntvnodes);
646 if ((vp->v_data == NULL) || (vp->v_type == VNON) || (vp->v_mount != mp)) {
649 mount_unlock(mp);
652 mount_lock(mp);
663 mount_lock(mp);
675 mount_lock(mp);
682 mount_lock(mp);
689 mount_lock(mp);
693 (void)vnode_iterate_reloadq(mp);
694 vnode_iterate_clear(mp);
695 mount_unlock(mp);
700 mount_lock_renames(mount_t mp)
702 lck_mtx_lock(&mp->mnt_renamelock);
706 mount_unlock_renames(mount_t mp)
708 lck_mtx_unlock(&mp->mnt_renamelock);
712 mount_lock(mount_t mp)
714 lck_mtx_lock(&mp->mnt_mlock);
718 mount_lock_spin(mount_t mp)
720 lck_mtx_lock_spin(&mp->mnt_mlock);
724 mount_unlock(mount_t mp)
726 lck_mtx_unlock(&mp->mnt_mlock);
731 mount_ref(mount_t mp, int locked)
734 mount_lock_spin(mp);
736 mp->mnt_count++;
739 mount_unlock(mp);
744 mount_drop(mount_t mp, int locked)
747 mount_lock_spin(mp);
749 mp->mnt_count--;
751 if (mp->mnt_count == 0 && (mp->mnt_lflag & MNT_LDRAIN))
752 wakeup(&mp->mnt_lflag);
755 mount_unlock(mp);
760 mount_iterref(mount_t mp, int locked)
766 if (mp->mnt_iterref < 0) {
769 mp->mnt_iterref++;
777 mount_isdrained(mount_t mp, int locked)
783 if (mp->mnt_iterref < 0)
793 mount_iterdrop(mount_t mp)
796 mp->mnt_iterref--;
797 wakeup(&mp->mnt_iterref);
802 mount_iterdrain(mount_t mp)
805 while (mp->mnt_iterref)
806 msleep((caddr_t)&mp->mnt_iterref, mnt_list_mtx_lock, PVFS, "mount_iterdrain", NULL);
808 mp->mnt_iterref = -1;
812 mount_iterreset(mount_t mp)
815 if (mp->mnt_iterref == -1)
816 mp->mnt_iterref = 0;
822 mount_refdrain(mount_t mp)
824 if (mp->mnt_lflag & MNT_LDRAIN)
826 mp->mnt_lflag |= MNT_LDRAIN;
828 while (mp->mnt_count)
829 msleep((caddr_t)&mp->mnt_lflag, &mp->mnt_mlock, PVFS, "mount_drain", NULL);
831 if (mp->mnt_vnodelist.tqh_first != NULL)
834 mp->mnt_lflag &= ~MNT_LDRAIN;
841 mount_set_noreaddirext(mount_t mp) {
842 mount_lock (mp);
843 mp->mnt_kern_flag |= MNTK_DENY_READDIREXT;
844 mount_unlock (mp);
852 vfs_busy(mount_t mp, int flags)
856 if (mp->mnt_lflag & MNT_LDEAD)
859 if (mp->mnt_lflag & MNT_LUNMOUNT) {
863 mount_lock(mp);
865 if (mp->mnt_lflag & MNT_LDEAD) {
866 mount_unlock(mp);
869 if (mp->mnt_lflag & MNT_LUNMOUNT) {
870 mp->mnt_lflag |= MNT_LWAIT;
877 msleep((caddr_t)mp, &mp->mnt_mlock, (PVFS | PDROP), "vfsbusy", NULL);
880 mount_unlock(mp);
883 lck_rw_lock_shared(&mp->mnt_rwlock);
889 if (mp->mnt_lflag & (MNT_LDEAD | MNT_LUNMOUNT)) {
890 lck_rw_done(&mp->mnt_rwlock);
901 vfs_unbusy(mount_t mp)
903 lck_rw_done(&mp->mnt_rwlock);
909 vfs_rootmountfailed(mount_t mp) {
912 mp->mnt_vtable->vfc_refcount--;
915 vfs_unbusy(mp);
917 mount_lock_destroy(mp);
920 mac_mount_label_destroy(mp);
923 FREE_ZONE(mp, sizeof(struct mount), M_MOUNT);
935 mount_t mp;
937 mp = _MALLOC_ZONE(sizeof(struct mount), M_MOUNT, M_WAITOK);
938 bzero((char *)mp, sizeof(struct mount));
941 mp->mnt_maxreadcnt = mp->mnt_maxwritecnt = MAXPHYS;
942 mp->mnt_segreadcnt = mp->mnt_segwritecnt = 32;
943 mp->mnt_maxsegreadsize = mp->mnt_maxreadcnt;
944 mp->mnt_maxsegwritesize = mp->mnt_maxwritecnt;
945 mp->mnt_devblocksize = DEV_BSIZE;
946 mp->mnt_alignmentmask = PAGE_MASK;
947 mp->mnt_ioqueue_depth = MNT_DEFAULT_IOQUEUE_DEPTH;
948 mp->mnt_ioscale = 1;
949 mp->mnt_ioflags = 0;
950 mp->mnt_realrootvp = NULLVP;
951 mp->mnt_authcache_ttl = CACHED_LOOKUP_RIGHT_TTL;
952 mp->mnt_throttle_mask = LOWPRI_MAX_NUM_DEV - 1;
953 mp->mnt_devbsdunit = 0;
955 mount_lock_init(mp);
956 (void)vfs_busy(mp, LK_NOWAIT);
958 TAILQ_INIT(&mp->mnt_vnodelist);
959 TAILQ_INIT(&mp->mnt_workerqueue);
960 TAILQ_INIT(&mp->mnt_newvnodes);
962 mp->mnt_vtable = vfsp;
963 mp->mnt_op = vfsp->vfc_vfsops;
964 mp->mnt_flag = MNT_RDONLY | MNT_ROOTFS;
965 mp->mnt_vnodecovered = NULLVP;
966 //mp->mnt_stat.f_type = vfsp->vfc_typenum;
967 mp->mnt_flag |= vfsp->vfc_flags & MNT_VISFLAGMASK;
973 strncpy(mp->mnt_vfsstat.f_fstypename, vfsp->vfc_name, MFSTYPENAMELEN);
974 mp->mnt_vfsstat.f_mntonname[0] = '/';
976 (void) copystr((const void *)devname, mp->mnt_vfsstat.f_mntfromname, MAXPATHLEN - 1, NULL);
979 mac_mount_label_init(mp);
980 mac_mount_label_associate(vfs_context_kernel(), mp);
982 return (mp);
1024 mount_t mp;
1048 mp = vfs_rootmountalloc_internal(vfsp, "root_device");
1049 mp->mnt_devvp = rootvp;
1051 if ((error = (*vfsp->vfc_mountroot)(mp, rootvp, ctx)) == 0) {
1061 mp->mnt_devvp = rootvp;
1066 mp->mnt_devvp->v_specflags |= SI_MOUNTEDON;
1068 vfs_unbusy(mp);
1070 mount_list_add(mp);
1078 vfs_init_io_attributes(rootvp, mp);
1083 if (mp->mnt_vtable->vfc_vfsflags & VFC_VFSNATIVEXATTR) {
1084 mp->mnt_kern_flag |= MNTK_EXTENDED_ATTRS;
1086 if (mp->mnt_vtable->vfc_vfsflags & VFC_VFSPREFLIGHT) {
1087 mp->mnt_kern_flag |= MNTK_UNMOUNT_PREFLIGHT;
1093 (void)VFS_START(mp, 0, ctx);
1097 if (vfs_getattr(mp, &vfsattr, ctx) == 0 &&
1101 mp->mnt_kern_flag |= MNTK_EXTENDED_ATTRS;
1106 mp->mnt_kern_flag |= MNTK_NAMED_STREAMS;
1111 mp->mnt_kern_flag |= MNTK_PATH_FROM_ID;
1124 if ((vfs_flags(mp) & MNT_MULTILABEL) == 0)
1127 error = VFS_ROOT(mp, &vp, ctx);
1131 dounmount(mp, MNT_FORCE, 0, ctx);
1134 error = vnode_label(mp, NULL, vp, NULL, 0, ctx);
1143 dounmount(mp, MNT_FORCE, 0, ctx);
1152 vfs_rootmountfailed(mp);
1180 mount_t mp;
1183 TAILQ_FOREACH(mp, &mountlist, mnt_list) {
1184 if (!strncmp(mp->mnt_vfsstat.f_mntonname, path,
1185 sizeof(mp->mnt_vfsstat.f_mntonname))) {
1186 retmp = mp;
1203 vfs_getnewfsid(struct mount *mp)
1213 mtype = mp->mnt_vtable->vfc_typenum;
1226 mp->mnt_vfsstat.f_fsid.val[0] = tfsid.val[0];
1227 mp->mnt_vfsstat.f_fsid.val[1] = tfsid.val[1];
1247 insmntque(vnode_t vp, mount_t mp)
1282 if ((vp->v_mount = mp) != NULL) {
1283 mount_lock_spin(mp);
1286 if (mp->mnt_lflag & MNT_LITER)
1287 TAILQ_INSERT_HEAD(&mp->mnt_newvnodes, vp, v_mntvnodes);
1289 TAILQ_INSERT_HEAD(&mp->mnt_vnodelist, vp, v_mntvnodes);
1293 mount_ref(mp, 1);
1294 mount_unlock(mp);
1893 * Remove any vnodes in the vnode table belonging to mount point mp.
1908 vflush(struct mount *mp, struct vnode *skipvp, int flags)
1916 mount_lock(mp);
1917 vnode_iterate_setup(mp);
1925 if (((flags & FORCECLOSE)==0) && ((mp->mnt_kern_flag & MNTK_UNMOUNT_PREFLIGHT) != 0)) {
1926 if (vnode_umount_preflight(mp, skipvp, flags)) {
1927 vnode_iterate_clear(mp);
1928 mount_unlock(mp);
1934 retval = vnode_iterate_prepare(mp);
1937 vnode_iterate_clear(mp);
1938 mount_unlock(mp);
1943 while (!TAILQ_EMPTY(&mp->mnt_workerqueue)) {
1945 vp = TAILQ_FIRST(&mp->mnt_workerqueue);
1946 TAILQ_REMOVE(&mp->mnt_workerqueue, vp, v_mntvnodes);
1947 TAILQ_INSERT_TAIL(&mp->mnt_vnodelist, vp, v_mntvnodes);
1949 if ( (vp->v_mount != mp) || (vp == skipvp)) {
1953 mount_unlock(mp);
1959 mount_lock(mp);
1970 mount_lock(mp);
1978 mount_lock(mp);
1986 mount_lock(mp);
1996 mount_lock(mp);
2017 mount_lock(mp);
2045 mount_lock(mp);
2053 mount_lock(mp);
2061 (void)vnode_iterate_reloadq(mp);
2067 if ( vnode_iterate_reloadq(mp) != 0) {
2071 vnode_iterate_clear(mp);
2072 mount_unlock(mp);
2886 struct mount *mp;
2894 mp = TAILQ_LAST(&mountlist, mntlist);
2896 error = dounmount(mp, MNT_FORCE, 0, vfs_context_current());
2898 printf("unmount of %s failed (", mp->mnt_vfsstat.f_mntonname);
2901 TAILQ_REMOVE(&mountlist, mp, mnt_list);
2905 printf("unmount of %p failed (", mp);
2942 vfs_init_io_attributes(vnode_t devvp, mount_t mp)
2963 VNOP_IOCTL(devvp, DKIOCGETTHROTTLEMASK, (caddr_t)&mp->mnt_throttle_mask, 0, NULL);
2968 mp->mnt_devbsdunit = num_trailing_0(mp->mnt_throttle_mask);
2971 rootunit = mp->mnt_devbsdunit;
2973 if (mp->mnt_devbsdunit == rootunit) {
2979 mp->mnt_kern_flag |= MNTK_ROOTDEV;
2993 mp->mnt_devblocksize = blksize;
3002 mp->mnt_maxreadcnt = MAX_UPL_SIZE * PAGE_SIZE;
3003 mp->mnt_maxwritecnt = MAX_UPL_SIZE * PAGE_SIZE;
3007 mp->mnt_kern_flag |= MNTK_VIRTUALDEV;
3011 mp->mnt_kern_flag |= MNTK_SSD;
3058 mp->mnt_maxreadcnt = (readmaxcnt > UINT32_MAX) ? UINT32_MAX : readmaxcnt;
3064 if (temp < mp->mnt_maxreadcnt)
3065 mp->mnt_maxreadcnt = (u_int32_t)temp;
3069 mp->mnt_maxwritecnt = (writemaxcnt > UINT32_MAX) ? UINT32_MAX : writemaxcnt;
3075 if (temp < mp->mnt_maxwritecnt)
3076 mp->mnt_maxwritecnt = (u_int32_t)temp;
3082 temp = mp->mnt_maxreadcnt / PAGE_SIZE;
3087 mp->mnt_segreadcnt = (u_int16_t)temp;
3092 temp = mp->mnt_maxwritecnt / PAGE_SIZE;
3097 mp->mnt_segwritecnt = (u_int16_t)temp;
3102 temp = mp->mnt_maxreadcnt;
3103 mp->mnt_maxsegreadsize = (u_int32_t)temp;
3108 temp = mp->mnt_maxwritecnt;
3109 mp->mnt_maxsegwritesize = (u_int32_t)temp;
3115 mp->mnt_alignmentmask = temp;
3123 mp->mnt_ioqueue_depth = temp;
3124 mp->mnt_ioscale = (mp->mnt_ioqueue_depth + (MNT_DEFAULT_IOQUEUE_DEPTH - 1)) / MNT_DEFAULT_IOQUEUE_DEPTH;
3126 if (mp->mnt_ioscale > 1)
3127 printf("ioqueue_depth = %d, ioscale = %d\n", (int)mp->mnt_ioqueue_depth, (int)mp->mnt_ioscale);
3130 mp->mnt_ioflags |= MNT_IOFLAGS_FUA_SUPPORTED;
3133 mp->mnt_ioflags |= MNT_IOFLAGS_UNMAP_SUPPORTED;
3155 struct mount *mp = vfs_getvfs(fsid);
3156 if (mp) {
3157 mount_lock_spin(mp);
3159 mp->mnt_kern_flag &= ~MNT_LNOTRESP; // Now responding
3161 mp->mnt_kern_flag |= MNT_LNOTRESP; // Not responding
3162 mount_unlock(mp);
3198 struct mount *mp;
3203 TAILQ_FOREACH(mp, &mountlist, mnt_list) {
3205 fsidlst[actual] = mp->mnt_vfsstat.f_fsid;
3224 struct mount *mp;
3228 TAILQ_FOREACH(mp, &mountlist, mnt_list) {
3231 fsidlst[(*actual) - 1] = mp->mnt_vfsstat.f_fsid;
3297 struct mount *mp;
3316 mp = mount_list_lookupby_fsid(&vc.vc32.vc_fsid, 0, 1); /* works for 32 and 64 */
3317 if (mp == NULL) {
3329 if (mp->mnt_op->vfs_sysctl != NULL) {
3331 if (vfs_64bitready(mp)) {
3332 error = mp->mnt_op->vfs_sysctl(name, namelen,
3342 error = mp->mnt_op->vfs_sysctl(name, namelen,
3366 mount_ref(mp, 0);
3367 mount_iterdrop(mp);
3370 error = safedounmount(mp, flags, ctx);
3385 sp = &mp->mnt_vfsstat;
3387 (error = vfs_update_vfsstat(mp, ctx, VFS_USER_EVENT)))
3392 sfs.f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
3393 sfs.f_type = mp->mnt_vtable->vfc_typenum;
3404 if (mp->mnt_kern_flag & MNTK_TYPENAME_OVERRIDE) {
3405 strlcpy(&sfs.f_fstypename[0], &mp->fstypename_override[0], MFSTYPENAMELEN);
3417 sfs.f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
3418 sfs.f_type = mp->mnt_vtable->vfc_typenum;
3462 if (mp->mnt_kern_flag & MNTK_TYPENAME_OVERRIDE) {
3463 strlcpy(&sfs.f_fstypename[0], &mp->fstypename_override[0], MFSTYPENAMELEN);
3479 mount_iterdrop(mp);
4731 mount_t mp;
4763 mp = mount_list_lookupby_fsid(&fsid_list[i], 0, 1);
4765 if(mp == (struct mount *)0)
4767 mount_lock(mp);
4768 if (mp->mnt_lflag & (MNT_LDEAD | MNT_LUNMOUNT)) {
4769 mount_unlock(mp);
4770 mount_iterdrop(mp);
4774 mount_unlock(mp);
4777 ret = callout(mp, arg);
4779 mount_iterdrop(mp);
4812 vfs_update_vfsstat(mount_t mp, vfs_context_t ctx, __unused int eventtype)
4833 error = mac_mount_check_getattr(ctx, mp, &va);
4839 if ((error = vfs_getattr(mp, &va, ctx)) != 0) {
4864 mp->mnt_vfsstat.f_bsize = (va.f_bsize > 0 ? va.f_bsize : 512);
4866 mp->mnt_vfsstat.f_bsize = mp->mnt_devblocksize; /* default from the device block size */
4869 mp->mnt_vfsstat.f_iosize = va.f_iosize;
4871 mp->mnt_vfsstat.f_iosize = 1024 * 1024; /* 1MB sensible I/O size */
4874 mp->mnt_vfsstat.f_blocks = va.f_blocks;
4876 mp->mnt_vfsstat.f_bfree = va.f_bfree;
4878 mp->mnt_vfsstat.f_bavail = va.f_bavail;
4880 mp->mnt_vfsstat.f_bused = va.f_bused;
4882 mp->mnt_vfsstat.f_files = va.f_files;
4884 mp->mnt_vfsstat.f_ffree = va.f_ffree;
4888 mp->mnt_vfsstat.f_fssubtype = va.f_fssubtype;
4894 mount_list_add(mount_t mp)
4902 TAILQ_INSERT_TAIL(&mountlist, mp, mnt_list);
4912 mount_list_remove(mount_t mp)
4915 TAILQ_REMOVE(&mountlist, mp, mnt_list);
4917 mp->mnt_list.tqe_next = NULL;
4918 mp->mnt_list.tqe_prev = NULL;
4926 mount_t mp;
4929 TAILQ_FOREACH(mp, &mountlist, mnt_list) {
4930 if (!(mp->mnt_kern_flag & MNTK_UNMOUNT) &&
4931 (mp->mnt_kern_flag & MNTK_PATH_FROM_ID) &&
4932 (mp->mnt_vfsstat.f_fsid.val[0] == volfs_id)) {
4933 cur_mount = mp;
4946 mp = cur_mount;
4947 if (vfs_busy(mp, LK_NOWAIT) != 0) {
4950 mount_iterdrop(mp);
4960 mount_t mp;
4964 TAILQ_FOREACH(mp, &mountlist, mnt_list)
4965 if (mp->mnt_vfsstat.f_fsid.val[0] == fsid->val[0] &&
4966 mp->mnt_vfsstat.f_fsid.val[1] == fsid->val[1]) {
4967 retmp = mp;
6508 mount_t mp;
6536 mp = vp->v_mount;
6537 if (mp != NULL) {
6541 (vfs_flags(mp) & MNT_NOUSERXATTR)) {
7799 vfs_setlocklocal(mount_t mp)
7801 mount_lock_spin(mp);
7802 mp->mnt_kern_flag |= MNTK_LOCK_LOCAL;
7803 mount_unlock(mp);
7809 vnode_iterate(mp, 0, setlocklocal_callback, NULL);
7813 vfs_setunmountpreflight(mount_t mp)
7815 mount_lock_spin(mp);
7816 mp->mnt_kern_flag |= MNTK_UNMOUNT_PREFLIGHT;
7817 mount_unlock(mp);
7821 vfs_setcompoundopen(mount_t mp)
7823 mount_lock_spin(mp);
7824 mp->mnt_compound_ops |= COMPOUND_VNOP_OPEN;
7825 mount_unlock(mp);
8238 vnode_resolver_create(mount_t mp, vnode_t vp, struct vnode_trigger_param *tinfo, boolean_t external)
8271 if (mp) {
8272 OSAddAtomic(1, &mp->mnt_numtriggers);
8302 mount_t mp;
8304 mp = vnode_mount(vp);
8318 OSAddAtomic(-1, &mp->mnt_numtriggers);
8497 triggerisdescendant(mount_t mp, mount_t rmp)
8510 if (mp->mnt_flag & MNT_ROOTFS)
8513 vp = mp->mnt_vnodecovered;
8517 mp = vp->v_mount;
8518 if (mp == rmp) {
8539 trigger_unmount_callback(mount_t mp, void * arg)
8547 if (mp == infop->top_mp)
8550 if ((mp->mnt_vnodecovered == NULL) ||
8551 (vnode_getwithref(mp->mnt_vnodecovered) != 0)) {
8555 if ((mp->mnt_vnodecovered->v_mountedhere == mp) &&
8556 (mp->mnt_vnodecovered->v_resolve != NULL) &&
8557 (mp->mnt_vnodecovered->v_resolve->vr_flags & VNT_RESOLVED)) {
8560 vnode_put(mp->mnt_vnodecovered);
8565 if ( !mountedtrigger || !triggerisdescendant(mp, infop->top_mp) )
8578 if (mp == vp->v_mountedhere) {
8581 mp->mnt_vfsstat.f_mntonname);
8603 * ref on mp so save its covered vp for later processing
8605 infop->trigger_vp = mp->mnt_vnodecovered;
8608 if (infop->trigger_vp->v_mountedhere == mp) {
8610 infop->trigger_mp = mp;
8622 * Note: mp->mnt_rwlock is held exclusively on entry (so be carefull)
8626 vfs_nested_trigger_unmounts(mount_t mp, int flags, vfs_context_t ctx)
8631 if (mp->mnt_numtriggers == 0) {
8635 if ((mp->mnt_vnodecovered != NULL) &&
8636 (vnode_getwithref(mp->mnt_vnodecovered) == 0)) {
8639 if ((mp->mnt_vnodecovered->v_mountedhere == mp) &&
8640 (mp->mnt_vnodecovered->v_resolve != NULL) &&
8641 (mp->mnt_vnodecovered->v_resolve->vr_flags & VNT_VFS_UNMOUNTED)) {
8644 vnode_put(mp->mnt_vnodecovered);
8653 info.top_mp = mp;
8676 vfs_addtrigger(mount_t mp, const char *relpath, struct vnode_trigger_info *vtip, vfs_context_t ctx)
8686 lck_rw_assert(&mp->mnt_rwlock, LCK_RW_ASSERT_HELD);
8695 res = VFS_ROOT(mp, &rvp, ctx);
8732 res = vnode_resolver_create(mp, vp, &vtp, TRUE);