Index: vfs_syscalls.c =================================================================== RCS file: /usr/repo/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.389 diff -u -p -r1.389 vfs_syscalls.c --- vfs_syscalls.c 11 Jun 2005 14:58:20 -0000 1.389 +++ vfs_syscalls.c 11 Jun 2005 18:22:26 -0000 @@ -409,23 +409,25 @@ kern_getfsstat(struct thread *td, struct int error; maxcount = bufsize / sizeof(struct statfs); - mtx_lock(&Giant); - mtx_lock(&mountlist_mtx); if (bufsize == 0) sfsp = NULL; else if (bufseg == UIO_USERSPACE) sfsp = *buf; else /* if (bufseg == UIO_SYSSPACE) */ { count = 0; + mtx_lock(&mountlist_mtx); TAILQ_FOREACH(mp, &mountlist, mnt_list) { count++; } + mtx_unlock(&mountlist_mtx); if (maxcount > count) maxcount = count; sfsp = *buf = malloc(maxcount * sizeof(struct statfs), M_TEMP, M_WAITOK); } count = 0; + mtx_lock(&Giant); + mtx_lock(&mountlist_mtx); for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { if (prison_canseemount(td->td_ucred, mp) != 0) { nmp = TAILQ_NEXT(mp, mnt_list);