Index: sys/kern/vfs_export.c =================================================================== --- sys/kern/vfs_export.c (revision 203085) +++ sys/kern/vfs_export.c (working copy) @@ -279,7 +279,7 @@ vfs_export(struct mount *mp, struct export_args *a return (EINVAL); error = 0; - lockmgr(&mp->mnt_explock, LK_EXCLUSIVE, NULL); + sx_xlock(&mp->mnt_explock); nep = mp->mnt_export; if (argp->ex_flags & MNT_DELEXPORT) { if (nep == NULL) { @@ -320,7 +320,7 @@ vfs_export(struct mount *mp, struct export_args *a } out: - lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); + sx_xunlock(&mp->mnt_explock); /* * Once we have executed the vfs_export() command, we do * not want to keep the "export" option around in the @@ -472,10 +472,10 @@ vfs_stdcheckexp(struct mount *mp, struct sockaddr { struct netcred *np; - lockmgr(&mp->mnt_explock, LK_SHARED, NULL); + sx_slock(&mp->mnt_explock); np = vfs_export_lookup(mp, nam); if (np == NULL) { - lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); + sx_sunlock(&mp->mnt_explock); *credanonp = NULL; return (EACCES); } @@ -486,7 +486,7 @@ vfs_stdcheckexp(struct mount *mp, struct sockaddr *numsecflavors = np->netc_numsecflavors; if (secflavors) *secflavors = np->netc_secflavors; - lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); + sx_sunlock(&mp->mnt_explock); return (0); } Index: sys/kern/vfs_mount.c =================================================================== --- sys/kern/vfs_mount.c (revision 203085) +++ sys/kern/vfs_mount.c (working copy) @@ -459,7 +459,7 @@ mount_init(void *mem, int size, int flags) mp = (struct mount *)mem; mtx_init(&mp->mnt_mtx, "struct mount mtx", NULL, MTX_DEF); - lockinit(&mp->mnt_explock, PVFS, "explock", 0, 0); + sx_init(&mp->mnt_explock, "explock"); return (0); } @@ -469,7 +469,7 @@ mount_fini(void *mem, int size) struct mount *mp; mp = (struct mount *)mem; - lockdestroy(&mp->mnt_explock); + sx_destroy(&mp->mnt_explock); mtx_destroy(&mp->mnt_mtx); } Index: sys/fs/nfsserver/nfs_nfsdport.c =================================================================== --- sys/fs/nfsserver/nfs_nfsdport.c (revision 203085) +++ sys/fs/nfsserver/nfs_nfsdport.c (working copy) @@ -3093,7 +3093,7 @@ nfsd_modevent(module_t mod, int type, void *data) mtx_init(&nfs_v4root_mutex, "nfs_v4root_mutex", NULL, MTX_DEF); mtx_init(&nfsv4root_mnt.mnt_mtx, "struct mount mtx", NULL, MTX_DEF); - lockinit(&nfsv4root_mnt.mnt_explock, PVFS, "explock", 0, 0); + sx_init(&nfsv4root_mnt.mnt_explock, "explock"); nfsrvd_initcache(); nfsd_init(); NFSD_LOCK(); @@ -3125,7 +3125,7 @@ nfsd_modevent(module_t mod, int type, void *data) mtx_destroy(&nfs_cache_mutex); mtx_destroy(&nfs_v4root_mutex); mtx_destroy(&nfsv4root_mnt.mnt_mtx); - lockdestroy(&nfsv4root_mnt.mnt_explock); + sx_destroy(&nfsv4root_mnt.mnt_explock); loaded = 0; break; default: Index: sys/sys/mount.h =================================================================== --- sys/sys/mount.h (revision 203085) +++ sys/sys/mount.h (working copy) @@ -37,7 +37,7 @@ #include #ifdef _KERNEL #include -#include +#include #include #endif @@ -186,7 +186,7 @@ struct mount { struct thread *mnt_susp_owner; /* (i) thread owning suspension */ #define mnt_endzero mnt_gjprovider char *mnt_gjprovider; /* gjournal provider name */ - struct lock mnt_explock; /* vfs_export walkers lock */ + struct sx mnt_explock; /* vfs_export walkers lock */ }; struct vnode *__mnt_vnode_next(struct vnode **mvp, struct mount *mp);