ml_iterator_vfs_busy Drop the mountlist processing from vfs_busy() and vfs_unbusy(). diff -r 28fea04e7b15 -r bb476fea44cd sys/compat/common/vfs_syscalls_20.c --- a/sys/compat/common/vfs_syscalls_20.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/compat/common/vfs_syscalls_20.c Thu Mar 30 11:17:57 2017 +0200 @@ -219,19 +219,19 @@ if (sfsp && count < maxcount) { error = dostatvfs(mp, sbuf, l, SCARG(uap, flags), 0); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); continue; } error = vfs2fs(sfsp, sbuf); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); goto out; } sfsp++; root |= strcmp(sbuf->f_mntonname, "/") == 0; } count++; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } if (root == 0 && l->l_proc->p_cwdi->cwdi_rdir) { /* diff -r 28fea04e7b15 -r bb476fea44cd sys/compat/netbsd32/netbsd32_compat_20.c --- a/sys/compat/netbsd32/netbsd32_compat_20.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/compat/netbsd32/netbsd32_compat_20.c Thu Mar 30 11:17:57 2017 +0200 @@ -102,21 +102,21 @@ if (sfsp && count < maxcount) { error = dostatvfs(mp, sb, l, SCARG(uap, flags), 0); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); error = 0; continue; } compat_20_netbsd32_from_statvfs(sb, &sb32); error = copyout(&sb32, sfsp, sizeof(sb32)); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); goto out; } sfsp = (char *)sfsp + sizeof(sb32); root |= strcmp(sb->f_mntonname, "/") == 0; } count++; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } if (root == 0 && p->p_cwdi->cwdi_rdir) { diff -r 28fea04e7b15 -r bb476fea44cd sys/compat/osf1/osf1_mount.c --- a/sys/compat/osf1/osf1_mount.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/compat/osf1/osf1_mount.c Thu Mar 30 11:17:57 2017 +0200 @@ -161,14 +161,14 @@ osf1_cvt_statfs_from_native(sp, &osfs); if ((error = copyout(&osfs, osf_sfsp, sizeof (struct osf1_statfs)))) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); } osf_sfsp += sizeof (struct osf1_statfs); } } count++; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); if (osf_sfsp && count > maxcount) diff -r 28fea04e7b15 -r bb476fea44cd sys/compat/ultrix/ultrix_fs.c --- a/sys/compat/ultrix/ultrix_fs.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/compat/ultrix/ultrix_fs.c Thu Mar 30 11:17:57 2017 +0200 @@ -280,14 +280,14 @@ make_ultrix_mntent(sp, &tem); if ((error = copyout((void *)&tem, sfsp, sizeof(tem))) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); goto bad; } sfsp++; count++; } } - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/cd9660/cd9660_vfsops.c --- a/sys/fs/cd9660/cd9660_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/cd9660/cd9660_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -191,13 +191,13 @@ args.flags = ISOFSMNT_ROOT; if ((error = iso_mountfs(rootvp, mp, l, &args)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } mountlist_append(mp); (void)cd9660_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (0); } diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/filecorefs/filecore_vfsops.c --- a/sys/fs/filecorefs/filecore_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/filecorefs/filecore_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -201,13 +201,13 @@ args.flags = FILECOREMNT_ROOT; if ((error = filecore_mountfs(rootvp, mp, p, &args)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } mountlist_append(mp); (void)filecore_statvfs(mp, &mp->mnt_stat, p); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (0); } #endif diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/msdosfs/msdosfs_vfsops.c --- a/sys/fs/msdosfs/msdosfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/msdosfs/msdosfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -247,14 +247,14 @@ args.dirmask = 0777; if ((error = msdosfs_mountfs(rootvp, mp, l, &args)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } if ((error = update_mp(mp, &args)) != 0) { (void)msdosfs_unmount(mp, 0); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); vrele(rootvp); return (error); @@ -262,7 +262,7 @@ mountlist_append(mp); (void)msdosfs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (0); } diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/ntfs/ntfs_vfsops.c --- a/sys/fs/ntfs/ntfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/ntfs/ntfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -115,14 +115,14 @@ args.mode = 0777; if ((error = ntfs_mountfs(rootvp, mp, &args, l)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } mountlist_append(mp); (void)ntfs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (0); } diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/union/union_vnops.c --- a/sys/fs/union/union_vnops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/union/union_vnops.c Thu Mar 30 11:17:57 2017 +0200 @@ -250,11 +250,11 @@ */ while (dvp != udvp && (dvp->v_type == VDIR) && (mp = dvp->v_mountedhere)) { - if (vfs_busy(mp, NULL)) + if (vfs_busy(mp, 0)) continue; vput(dvp); error = VFS_ROOT(mp, &tdvp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); if (error) { return (error); } diff -r 28fea04e7b15 -r bb476fea44cd sys/fs/v7fs/v7fs_vfsops.c --- a/sys/fs/v7fs/v7fs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/fs/v7fs/v7fs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -576,14 +576,14 @@ if ((error = v7fs_mountfs(rootvp, mp, _BYTE_ORDER))) { DPRINTF("mountfs error=%d\n", error); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return error; } mountlist_append(mp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return 0; } diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/kern_veriexec.c --- a/sys/kern/kern_veriexec.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/kern_veriexec.c Thu Mar 30 11:17:57 2017 +0200 @@ -1371,7 +1371,7 @@ fileassoc_table_run(mp, veriexec_hook, (fileassoc_cb_t)veriexec_file_dump, rarray); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); @@ -1393,7 +1393,7 @@ if (lerror && lerror != ENOENT) error = lerror; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_lookup.c --- a/sys/kern/vfs_lookup.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_lookup.c Thu Mar 30 11:17:57 2017 +0200 @@ -1087,7 +1087,7 @@ KASSERT(searchdir != foundobj); - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error != 0) { vput(foundobj); goto done; @@ -1097,7 +1097,7 @@ } vput(foundobj); error = VFS_ROOT(mp, &foundobj); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); if (error) { if (searchdir != NULL) { vn_lock(searchdir, LK_EXCLUSIVE | LK_RETRY); diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_mount.c --- a/sys/kern/vfs_mount.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_mount.c Thu Mar 30 11:17:57 2017 +0200 @@ -165,7 +165,7 @@ mutex_init(&mp->mnt_unmounting, MUTEX_DEFAULT, IPL_NONE); mutex_init(&mp->mnt_renamelock, MUTEX_DEFAULT, IPL_NONE); mutex_init(&mp->mnt_updating, MUTEX_DEFAULT, IPL_NONE); - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); KASSERT(error == 0); mp->mnt_vnodecovered = vp; mount_initspecific(mp); @@ -307,26 +307,26 @@ * => Will fail if the file system is being unmounted, or is unmounted. */ int -vfs_busy(struct mount *mp, struct mount **nextp) +vfs_busy(struct mount *mp, int flags) { KASSERT(mp->mnt_refcnt > 0); + KASSERT((flags & ~MNT_NOWAIT) == 0); - mutex_enter(&mp->mnt_unmounting); + if ((flags & MNT_NOWAIT) != 0) { + if (!mutex_tryenter(&mp->mnt_unmounting)) + return EBUSY; + } else { + mutex_enter(&mp->mnt_unmounting); + } + if (__predict_false((mp->mnt_iflag & IMNT_GONE) != 0)) { mutex_exit(&mp->mnt_unmounting); - if (nextp != NULL) { - KASSERT(mutex_owned(&mountlist_lock)); - *nextp = TAILQ_NEXT(mp, mnt_list); - } return ENOENT; } ++mp->mnt_busynest; KASSERT(mp->mnt_busynest != 0); mutex_exit(&mp->mnt_unmounting); - if (nextp != NULL) { - mutex_exit(&mountlist_lock); - } atomic_inc_uint(&mp->mnt_refcnt); return 0; } @@ -337,17 +337,13 @@ * Every successful vfs_busy() call must be undone by a vfs_unbusy() call. * * => If keepref is true, preserve reference added by vfs_busy(). - * => If nextp != NULL, acquire mountlist_lock. */ void -vfs_unbusy(struct mount *mp, bool keepref, struct mount **nextp) +vfs_unbusy(struct mount *mp, bool keepref) { KASSERT(mp->mnt_refcnt > 0); - if (nextp != NULL) { - mutex_enter(&mountlist_lock); - } mutex_enter(&mp->mnt_unmounting); KASSERT(mp->mnt_busynest != 0); mp->mnt_busynest--; @@ -355,10 +351,6 @@ if (!keepref) { vfs_destroy(mp); } - if (nextp != NULL) { - KASSERT(mutex_owned(&mountlist_lock)); - *nextp = TAILQ_NEXT(mp, mnt_list); - } } struct vnode_iterator { @@ -732,7 +724,7 @@ } if ((error = fstrans_mount(mp)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return error; } @@ -799,7 +791,7 @@ mutex_exit(&mp->mnt_updating); /* Hold an additional reference to the mount across VFS_START(). */ - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); (void) VFS_STATVFS(mp, &mp->mnt_stat); error = VFS_START(mp, 0); if (error) { @@ -820,7 +812,7 @@ vp->v_mountedhere = NULL; mutex_exit(&mp->mnt_updating); fstrans_unmount(mp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return error; @@ -1001,12 +993,12 @@ mountlist_iterator_init_reverse(&iter); while ((mp = mountlist_iterator_next(iter, 0)) != NULL) { if (nmp == NULL || mp->mnt_gen > nmp->mnt_gen) { - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); if (nmp) vfs_destroy(nmp); nmp = mp; } else - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); if (nmp == NULL) { @@ -1047,7 +1039,7 @@ (void *)mp, mp->mnt_stat.f_mntonname, mp->mnt_stat.f_mntfromname); #endif - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); if ((error = dounmount(mp, force ? MNT_FORCE : 0, l)) == 0) { vfs_unmount_print(mp, ""); progress = true; @@ -1251,7 +1243,7 @@ mountlist_iterator_init(&iter); mp = mountlist_iterator_next(iter, 0); KASSERT(mp != NULL); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); mountlist_iterator_destroy(iter); mp->mnt_flag |= MNT_ROOTFS; @@ -1571,7 +1563,7 @@ mutex_exit(&mount_list_lock); /* Try to mark this mount busy and return on success. */ - if (vfs_busy(mp, NULL) == 0) { + if (vfs_busy(mp, flags) == 0) { vfs_destroy(mp); return mp; } diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_subr.c --- a/sys/kern/vfs_subr.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_subr.c Thu Mar 30 11:17:57 2017 +0200 @@ -778,7 +778,7 @@ while ((mp = mountlist_iterator_next(iter, MNT_NOWAIT)) != NULL) { if ((mp->mnt_iflag & IMNT_ONWORKLIST) == 0 || mp->mnt_synclist_slot != syncer_delayno) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); continue; } mp->mnt_synclist_slot = sync_delay_slot(sync_delay(mp)); @@ -786,7 +786,7 @@ VFS_SYNC(mp, MNT_LAZY, curlwp->l_cred); fstrans_done(mp); } - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); @@ -995,7 +995,7 @@ if (bp + VPTRSZ + VNODESZ > ewhere) { vrele(vp); vfs_vnode_iterator_destroy(marker); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); mountlist_iterator_destroy(iter); sysctl_relock(); *sizep = bp - where; @@ -1006,7 +1006,7 @@ (error = copyout(&vbuf, bp + VPTRSZ, VNODESZ))) { vrele(vp); vfs_vnode_iterator_destroy(marker); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); mountlist_iterator_destroy(iter); sysctl_relock(); return (error); @@ -1015,7 +1015,7 @@ bp += VPTRSZ + VNODESZ; } vfs_vnode_iterator_destroy(marker); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); sysctl_relock(); @@ -1666,7 +1666,7 @@ if (VOP_ISLOCKED(vp)) vprint(NULL, vp); } - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } } diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_syscalls.c --- a/sys/kern/vfs_syscalls.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_syscalls.c Thu Mar 30 11:17:57 2017 +0200 @@ -282,7 +282,7 @@ if (error) goto out; - if (vfs_busy(mp, NULL)) { + if (vfs_busy(mp, 0)) { error = EPERM; goto out; } @@ -345,7 +345,7 @@ } mutex_exit(&mp->mnt_updating); vfs_resume(mp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); if ((error == 0) && !(saved_flags & MNT_EXTATTR) && (flags & MNT_EXTATTR)) { @@ -438,7 +438,7 @@ if ((vp->v_vflag & VV_ROOT) == 0) return EINVAL; - if (vfs_busy(mp, NULL)) + if (vfs_busy(mp, 0)) return EPERM; mutex_enter(&mp->mnt_updating); @@ -448,7 +448,7 @@ mp->mnt_flag &= ~MNT_OP_FLAGS; mutex_exit(&mp->mnt_updating); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); } @@ -658,7 +658,7 @@ } mutex_exit(&mp->mnt_updating); fstrans_done(mp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); #ifdef DEBUG @@ -1264,20 +1264,20 @@ if (sfsp && count < maxcount) { error = dostatvfs(mp, sb, l, flags, 0); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); error = 0; continue; } error = copyfn(sb, sfsp, entry_sz); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); goto out; } sfsp = (char *)sfsp + entry_sz; root |= strcmp(sb->f_mntonname, "/") == 0; } count++; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } if (root == 0 && p->p_cwdi->cwdi_rdir) { @@ -1352,12 +1352,12 @@ goto out; } while ((mp = vp->v_mountedhere) != NULL) { - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); vput(vp); if (error != 0) goto out; error = VFS_ROOT(mp, &tdp); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); if (error) goto out; vp = tdp; diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_trans.c --- a/sys/kern/vfs_trans.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_trans.c Thu Mar 30 11:17:57 2017 +0200 @@ -191,7 +191,7 @@ int error; struct fstrans_mount_info *newfmi; - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error) return error; newfmi = kmem_alloc(sizeof(*newfmi), KM_SLEEP); @@ -205,7 +205,7 @@ mp->mnt_iflag |= IMNT_HAS_TRANS; mutex_exit(&fstrans_mount_lock); - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); return 0; } diff -r 28fea04e7b15 -r bb476fea44cd sys/kern/vfs_vnode.c --- a/sys/kern/vfs_vnode.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/kern/vfs_vnode.c Thu Mar 30 11:17:57 2017 +0200 @@ -1269,7 +1269,7 @@ mutex_exit(&vcache_lock); /* Allocate and initialize a new vcache / vnode pair. */ - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error) return error; new_vip = vcache_alloc(); @@ -1286,7 +1286,7 @@ /* If another thread beat us inserting this node, retry. */ if (vip != new_vip) { vcache_dealloc(new_vip); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); goto again; } mutex_exit(&vcache_lock); @@ -1298,7 +1298,7 @@ SLIST_REMOVE(&vcache_hashtab[hash & vcache_hashmask], new_vip, vnode_impl, vi_hash); vcache_dealloc(new_vip); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); KASSERT(*vpp == NULL); return error; } @@ -1308,7 +1308,7 @@ vfs_insmntque(vp, mp); if ((mp->mnt_iflag & IMNT_MPSAFE) != 0) vp->v_vflag |= VV_MPSAFE; - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); /* Finished loading, finalize node. */ mutex_enter(&vcache_lock); @@ -1336,7 +1336,7 @@ *vpp = NULL; /* Allocate and initialize a new vcache / vnode pair. */ - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error) return error; vip = vcache_alloc(); @@ -1349,7 +1349,7 @@ if (error) { mutex_enter(&vcache_lock); vcache_dealloc(vip); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); KASSERT(*vpp == NULL); return error; } @@ -1373,7 +1373,7 @@ vfs_insmntque(vp, mp); if ((mp->mnt_iflag & IMNT_MPSAFE) != 0) vp->v_vflag |= VV_MPSAFE; - vfs_unbusy(mp, true, NULL); + vfs_unbusy(mp, true); /* Finished loading, finalize node. */ mutex_enter(&vcache_lock); diff -r 28fea04e7b15 -r bb476fea44cd sys/miscfs/procfs/procfs_linux.c --- a/sys/miscfs/procfs/procfs_linux.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/miscfs/procfs/procfs_linux.c Thu Mar 30 11:17:57 2017 +0200 @@ -618,7 +618,7 @@ root |= procfs_format_sfs(&mtab, &mtabsz, bf, LBFSZ, &sfs, curl, 0); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); diff -r 28fea04e7b15 -r bb476fea44cd sys/nfs/nfs_export.c --- a/sys/nfs/nfs_export.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/nfs/nfs_export.c Thu Mar 30 11:17:57 2017 +0200 @@ -211,7 +211,7 @@ netexport_wrlock(); ne = TAILQ_FIRST(&netexport_list); mp = ne->ne_mount; - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); netexport_wrunlock(); if (error != 0) { kpause("nfsfini", false, hz, NULL); @@ -220,7 +220,7 @@ mutex_enter(&mp->mnt_updating); /* mnt_flag */ netexport_unmount(mp); mutex_exit(&mp->mnt_updating); /* mnt_flag */ - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } rw_destroy(&netexport_lock); } @@ -284,7 +284,7 @@ } /* Mark the file system busy. */ - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); vput(vp); if (error != 0) return error; @@ -332,7 +332,7 @@ netexport_wrunlock(); if (nmp == NULL) mutex_exit(&mp->mnt_updating); /* mnt_flag */ - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return error; } diff -r 28fea04e7b15 -r bb476fea44cd sys/nfs/nfs_vfsops.c --- a/sys/nfs/nfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/nfs/nfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -380,7 +380,7 @@ mountlist_append(mp); rootvp = vp; mp->mnt_vnodecovered = NULLVP; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); /* Get root attributes (for the time). */ vn_lock(vp, LK_SHARED | LK_RETRY); @@ -435,7 +435,7 @@ error = mountnfs(&ndmntp->ndm_args, mp, m, mntname, ndmntp->ndm_args.hostname, vpp, l); if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); printf("nfs_mountroot: mount %s failed: %d\n", mntname, error); diff -r 28fea04e7b15 -r bb476fea44cd sys/rump/librump/rumpvfs/rumpfs.c --- a/sys/rump/librump/rumpvfs/rumpfs.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/rump/librump/rumpvfs/rumpfs.c Thu Mar 30 11:17:57 2017 +0200 @@ -1976,7 +1976,7 @@ panic("set_statvfs_info failed for rootfs: %d", error); mp->mnt_flag &= ~MNT_RDONLY; - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return 0; } diff -r 28fea04e7b15 -r bb476fea44cd sys/sys/mount.h --- a/sys/sys/mount.h Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/sys/mount.h Thu Mar 30 11:17:57 2017 +0200 @@ -418,9 +418,9 @@ bool vfs_unmountall(struct lwp *); /* unmount file systems */ bool vfs_unmountall1(struct lwp *, bool, bool); bool vfs_unmount_forceone(struct lwp *); -int vfs_busy(struct mount *, struct mount **); +int vfs_busy(struct mount *, int); int vfs_rootmountalloc(const char *, const char *, struct mount **); -void vfs_unbusy(struct mount *, bool, struct mount **); +void vfs_unbusy(struct mount *, bool); int vfs_attach(struct vfsops *); int vfs_detach(struct vfsops *); void vfs_reinit(void); diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/ext2fs/ext2fs_vfsops.c --- a/sys/ufs/ext2fs/ext2fs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/ext2fs/ext2fs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -279,7 +279,7 @@ } if ((error = ext2fs_mountfs(rootvp, mp)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return error; } @@ -288,7 +288,7 @@ fs = ump->um_e2fs; ext2fs_sb_setmountinfo(fs, mp); (void)ext2fs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); setrootfstime((time_t)fs->e2fs.e2fs_wtime); return 0; } diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/ffs/ffs_vfsops.c --- a/sys/ufs/ffs/ffs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/ffs/ffs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -377,7 +377,7 @@ */ mp->mnt_flag |= MNT_FORCE; if ((error = ffs_mountfs(rootvp, mp, l)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } @@ -388,7 +388,7 @@ memset(fs->fs_fsmnt, 0, sizeof(fs->fs_fsmnt)); (void)copystr(mp->mnt_stat.f_mntonname, fs->fs_fsmnt, MNAMELEN - 1, 0); (void)ffs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); setrootfstime((time_t)fs->fs_time); return (0); } diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/lfs/lfs_bio.c --- a/sys/ufs/lfs/lfs_bio.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/lfs/lfs_bio.c Thu Mar 30 11:17:57 2017 +0200 @@ -536,12 +536,12 @@ if (only_onefs) { KASSERT(fs != NULL); - if (vfs_busy(fs->lfs_ivnode->v_mount, NULL)) + if (vfs_busy(fs->lfs_ivnode->v_mount, 0)) goto errout; mutex_enter(&lfs_lock); lfs_flush_fs(fs, flags); mutex_exit(&lfs_lock); - vfs_unbusy(fs->lfs_ivnode->v_mount, false, NULL); + vfs_unbusy(fs->lfs_ivnode->v_mount, false); } else { locked_fakequeue_count = 0; mountlist_iterator_init(&iter); @@ -553,7 +553,7 @@ lfs_flush_fs(tfs, flags); mutex_exit(&lfs_lock); } - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } mountlist_iterator_destroy(iter); } diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/lfs/lfs_syscalls.c --- a/sys/ufs/lfs/lfs_syscalls.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/lfs/lfs_syscalls.c Thu Mar 30 11:17:57 2017 +0200 @@ -253,7 +253,7 @@ cnt = blkcnt; - if ((error = vfs_busy(mntp, NULL)) != 0) + if ((error = vfs_busy(mntp, 0)) != 0) return (error); /* @@ -479,7 +479,7 @@ lfs_segunlock(fs); - vfs_unbusy(mntp, false, NULL); + vfs_unbusy(mntp, false); if (error) return (error); else if (do_again) @@ -508,7 +508,7 @@ } lfs_segunlock(fs); - vfs_unbusy(mntp, false, NULL); + vfs_unbusy(mntp, false); KASSERTMSG((numrefed == 0), "lfs_markv: numrefed=%d", numrefed); return (error); @@ -651,7 +651,7 @@ if ((mntp = vfs_getvfs(fsidp)) == NULL) return (ENOENT); - if ((error = vfs_busy(mntp, NULL)) != 0) + if ((error = vfs_busy(mntp, 0)) != 0) return (error); ump = VFSTOULFS(mntp); @@ -765,7 +765,7 @@ KASSERTMSG((numrefed == 0), "lfs_bmapv: numrefed=%d", numrefed); - vfs_unbusy(mntp, false, NULL); + vfs_unbusy(mntp, false); return 0; } @@ -804,7 +804,7 @@ fs = VFSTOULFS(mntp)->um_lfs; segnum = SCARG(uap, segment); - if ((error = vfs_busy(mntp, NULL)) != 0) + if ((error = vfs_busy(mntp, 0)) != 0) return (error); KERNEL_LOCK(1, NULL); @@ -812,7 +812,7 @@ error = lfs_do_segclean(fs, segnum); lfs_segunlock(fs); KERNEL_UNLOCK_ONE(NULL); - vfs_unbusy(mntp, false, NULL); + vfs_unbusy(mntp, false); return error; } diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/lfs/lfs_vfsops.c --- a/sys/ufs/lfs/lfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/lfs/lfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -464,7 +464,7 @@ if (lfs_sb_getnextseg(fs) < lfs_sb_getcurseg(fs) && fs->lfs_nowrap) { /* Don't try to write if we're suspended */ mutex_exit(&lfs_lock); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); continue; } if (LFS_STARVED_FOR_SEGS(fs)) { @@ -472,7 +472,7 @@ DLOG((DLOG_FLUSH, "lfs_writerd: need cleaning before writing possible\n")); lfs_wakeup_cleaner(fs); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); continue; } @@ -499,7 +499,7 @@ mutex_exit(&lfs_lock); } KASSERT(!mutex_owned(&lfs_lock)); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); } if (lfsc == 0) { mutex_enter(&lfs_lock); @@ -598,7 +598,7 @@ return (error); } if ((error = lfs_mountfs(rootvp, mp, l))) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); vfs_destroy(mp); return (error); } @@ -607,7 +607,7 @@ fs = ump->um_lfs; lfs_sb_setfsmnt(fs, mp->mnt_stat.f_mntonname); (void)lfs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); setrootfstime((time_t)lfs_sb_gettstamp(VFSTOULFS(mp)->um_lfs)); return (0); } diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/lfs/ulfs_vfsops.c --- a/sys/ufs/lfs/ulfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/lfs/ulfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -113,7 +113,7 @@ int error; /* Mark the mount busy, as we're passing it to kauth(9). */ - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error) { return (error); } @@ -122,7 +122,7 @@ error = lfsquota_handle_cmd(mp, l, args); mutex_exit(&mp->mnt_updating); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); #endif } @@ -169,7 +169,7 @@ } if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); } @@ -204,7 +204,7 @@ error = EINVAL; } mutex_exit(&mp->mnt_updating); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); #endif diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/mfs/mfs_vfsops.c --- a/sys/ufs/mfs/mfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/mfs/mfs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -215,7 +215,7 @@ mfsp->mfs_refcnt = 1; bufq_alloc(&mfsp->mfs_buflist, "fcfs", 0); if ((error = ffs_mountfs(rootvp, mp, l)) != 0) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); bufq_free(mfsp->mfs_buflist); vfs_destroy(mp); kmem_free(mfsp, sizeof(*mfsp)); @@ -227,7 +227,7 @@ fs = ump->um_fs; (void) copystr(mp->mnt_stat.f_mntonname, fs->fs_fsmnt, MNAMELEN - 1, 0); (void)ffs_statvfs(mp, &mp->mnt_stat); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (0); } @@ -375,14 +375,14 @@ * Add a reference to the mfsnode to prevent it disappearing in * this routine. */ - if ((error = vfs_busy(mp, NULL)) != 0) + if ((error = vfs_busy(mp, 0)) != 0) return error; vp = VFSTOUFS(mp)->um_devvp; mfsp = VTOMFS(vp); mutex_enter(&mfs_lock); mfsp->mfs_refcnt++; mutex_exit(&mfs_lock); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); base = mfsp->mfs_baseoff; mutex_enter(&mfs_lock); diff -r 28fea04e7b15 -r bb476fea44cd sys/ufs/ufs/ufs_vfsops.c --- a/sys/ufs/ufs/ufs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 +++ b/sys/ufs/ufs/ufs_vfsops.c Thu Mar 30 11:17:57 2017 +0200 @@ -132,7 +132,7 @@ int error; /* Mark the mount busy, as we're passing it to kauth(9). */ - error = vfs_busy(mp, NULL); + error = vfs_busy(mp, 0); if (error) { return (error); } @@ -141,7 +141,7 @@ error = quota_handle_cmd(mp, l, args); mutex_exit(&mp->mnt_updating); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); #endif } @@ -188,7 +188,7 @@ } if (error) { - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); } @@ -223,7 +223,7 @@ error = EINVAL; } mutex_exit(&mp->mnt_updating); - vfs_unbusy(mp, false, NULL); + vfs_unbusy(mp, false); return (error); #endif