current syncer bug...
Don Lewis
truckman at FreeBSD.org
Mon Jul 5 13:45:38 PDT 2004
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
@@ -1531,7 +1531,7 @@
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;
@@ -1585,11 +1585,10 @@
* 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) {
More information about the freebsd-current
mailing list