diff options
author | John Baldwin <jhb@FreeBSD.org> | 2009-02-06 16:05:00 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2009-02-06 16:05:00 +0000 |
commit | 95587158650a7eca428b14fc09ef1c68e850c81f (patch) | |
tree | f739387399e78d17003418d040f5e03b9e3a6645 | |
parent | a6d1e52c1a073e9ac0cbd78c0a547984e8904cc2 (diff) |
Notes
-rw-r--r-- | sys/kern/vfs_subr.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c index d06907940332..a1033b5c2453 100644 --- a/sys/kern/vfs_subr.c +++ b/sys/kern/vfs_subr.c @@ -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); |