svn commit: r188239 - in stable/7/sys: . contrib/pf dev/ath/ath_hal
dev/cxgb kern
John Baldwin
jhb at FreeBSD.org
Fri Feb 6 08:05:03 PST 2009
Author: jhb
Date: Fri Feb 6 16:05:00 2009
New Revision: 188239
URL: http://svn.freebsd.org/changeset/base/188239
Log:
MFC: Push down Giant in the vlnru kproc main loop so that it is only acquired
around calls to vlrureclaim() on non-MPSAFE filesystems.
Modified:
stable/7/sys/ (props changed)
stable/7/sys/contrib/pf/ (props changed)
stable/7/sys/dev/ath/ath_hal/ (props changed)
stable/7/sys/dev/cxgb/ (props changed)
stable/7/sys/kern/vfs_subr.c
Modified: stable/7/sys/kern/vfs_subr.c
==============================================================================
--- stable/7/sys/kern/vfs_subr.c Fri Feb 6 15:28:08 2009 (r188238)
+++ stable/7/sys/kern/vfs_subr.c Fri Feb 6 16:05:00 2009 (r188239)
@@ -717,15 +717,13 @@ static void
vnlru_proc(void)
{
struct mount *mp, *nmp;
- int done;
+ int done, vfslocked;
struct proc *p = vnlruproc;
struct thread *td = curthread;
EVENTHANDLER_REGISTER(shutdown_pre_sync, kproc_shutdown, p,
SHUTDOWN_PRI_FIRST);
- mtx_lock(&Giant);
-
for (;;) {
kthread_suspend_check(p);
mtx_lock(&vnode_free_list_mtx);
@@ -742,19 +740,13 @@ vnlru_proc(void)
done = 0;
mtx_lock(&mountlist_mtx);
for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) {
- int vfsunlocked;
if (vfs_busy(mp, LK_NOWAIT, &mountlist_mtx, td)) {
nmp = TAILQ_NEXT(mp, mnt_list);
continue;
}
- if (!VFS_NEEDSGIANT(mp)) {
- mtx_unlock(&Giant);
- vfsunlocked = 1;
- } else
- vfsunlocked = 0;
+ vfslocked = VFS_LOCK_GIANT(mp);
done += vlrureclaim(mp);
- if (vfsunlocked)
- mtx_lock(&Giant);
+ VFS_UNLOCK_GIANT(vfslocked);
mtx_lock(&mountlist_mtx);
nmp = TAILQ_NEXT(mp, mnt_list);
vfs_unbusy(mp, td);
More information about the svn-src-all
mailing list