Re: current syncer bug...

From: Don Lewis <truckman_at_FreeBSD.org>
Date: Mon, 5 Jul 2004 13:45:31 -0700 (PDT)
On  5 Jul, Poul-Henning Kamp wrote:
> In message <200407052006.i65K6Lrf001926_at_gw.catspoiler.org>, Don Lewis writes:
>>On  5 Jul, Poul-Henning Kamp wrote:
>>> 
>>> Waiting (max 60 seconds) for system process `vnlru' to stop...stopped
>>> Waiting (max 60 seconds) for system process `bufdaemon' to stop...stopped
>>> Waiting (max 60 seconds) for system process `syncer' to stop...0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>
>>Interesting ...
>>
>>Does it ever print "stopped", or does it hit the 60 second timeout?
> 
> Dunno, havn't waited that long.
> 
> This is a diskless system which boots single-user to run a test, there's
> never a R/w mount done.

I can reproduce this here by booting into single-user mode and then
rebooting.  At least it does time out after 60 seconds and let the
shutdown continue.

The following patch works for me (and fixes another bug):

Index: sys/kern/vfs_subr.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_subr.c,v
retrieving revision 1.503
diff -u -r1.503 vfs_subr.c
--- sys/kern/vfs_subr.c	5 Jul 2004 01:07:33 -0000	1.503
+++ sys/kern/vfs_subr.c	5 Jul 2004 20:43:23 -0000
_at__at_ -1531,7 +1531,7 _at__at_
 	int syncer_final_iter;
 
 	mtx_lock(&Giant);
-	last_work_seen = -1;
+	last_work_seen = 0;
 	syncer_final_iter = 0;
 	syncer_state = SYNCER_RUNNING;
 	starttime = time_second;
_at__at_ -1585,11 +1585,10 _at__at_
 		 * Return to the SHUTTING_DOWN state if any
 		 * new work appears.
 		 */
-		if (net_worklist_len > 0) {
+		if (net_worklist_len > 0 || syncer_state == SYNCER_RUNNING)
 			last_work_seen = syncer_delayno;
-			if (syncer_state == SYNCER_FINAL_DELAY)
-				syncer_state = SYNCER_SHUTTING_DOWN;
-		}
+		if (net_worklist_len > 0 && syncer_state == SYNCER_FINAL_DELAY)
+			syncer_state = SYNCER_SHUTTING_DOWN;
 		while ((vp = LIST_FIRST(slp)) != NULL) {
 			if (VOP_ISLOCKED(vp, NULL) != 0 ||
 			    vn_start_write(vp, &mp, V_NOWAIT) != 0) {
Received on Mon Jul 05 2004 - 18:45:38 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:00 UTC