Index: vfs_bio.c =================================================================== RCS file: /usr/repo/src/sys/kern/vfs_bio.c,v retrieving revision 1.509 diff -u -p -r1.509 vfs_bio.c --- vfs_bio.c 9 Aug 2006 17:43:26 -0000 1.509 +++ vfs_bio.c 30 Sep 2006 10:25:39 -0000 @@ -2008,6 +2008,8 @@ SYSINIT(bufdaemon, SI_SUB_KTHREAD_BUF, S static void buf_daemon() { + struct thread *td = FIRST_THREAD_IN_PROC(bufdaemonproc); + int locks; /* * This process needs to be suspended prior to shutdown sync. @@ -2021,6 +2023,7 @@ buf_daemon() curthread->td_pflags |= TDP_NORUNNINGBUF; mtx_lock(&bdlock); for (;;) { + locks = td->td_locks; bd_request = 0; mtx_unlock(&bdlock); @@ -2087,6 +2090,8 @@ buf_daemon() */ msleep(&bd_request, &bdlock, PVM, "qsleep", hz / 10); } + KASSERT(td->td_locks != locks, + ("%s: Leaked %d locks.", td->td_locks - locks)); } } Index: vfs_subr.c =================================================================== RCS file: /usr/repo/src/sys/kern/vfs_subr.c,v retrieving revision 1.682 diff -u -p -r1.682 vfs_subr.c --- vfs_subr.c 4 Sep 2006 22:15:44 -0000 1.682 +++ vfs_subr.c 30 Sep 2006 10:24:42 -0000 @@ -1615,7 +1615,7 @@ sched_sync(void) int net_worklist_len; int syncer_final_iter; int first_printf; - int error; + int locks; mtx_lock(&Giant); last_work_seen = 0; @@ -1629,6 +1629,7 @@ sched_sync(void) SHUTDOWN_PRI_LAST); for (;;) { + locks = td->td_locks; mtx_lock(&sync_mtx); if (syncer_state == SYNCER_FINAL_DELAY && syncer_final_iter == 0) { @@ -1685,11 +1686,10 @@ sched_sync(void) if (net_worklist_len > 0 && syncer_state == SYNCER_FINAL_DELAY) syncer_state = SYNCER_SHUTTING_DOWN; while ((bo = LIST_FIRST(slp)) != NULL) { - error = sync_vnode(bo, td); - if (error == 1) { + if (sync_vnode(bo, td) == 1) { LIST_REMOVE(bo, bo_synclist); LIST_INSERT_HEAD(next, bo, bo_synclist); - continue; + goto end; } } if (syncer_state == SYNCER_FINAL_DELAY && syncer_final_iter > 0) @@ -1709,7 +1709,7 @@ sched_sync(void) if (rushjob > 0) { rushjob -= 1; mtx_unlock(&sync_mtx); - continue; + goto end; } mtx_unlock(&sync_mtx); /* @@ -1729,6 +1729,9 @@ sched_sync(void) hz / SYNCER_SHUTDOWN_SPEEDUP); else if (time_uptime == starttime) tsleep(&lbolt, PPAUSE, "syncer", 0); +end: + KASSERT(td->td_locks != locks, + ("%s: Leaked %d locks.", td->td_locks - locks)); } }