Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Dec 2000 15:34:32 -0800 (PST)
From:      Matt Dillon <dillon@earth.backplane.com>
To:        Philipp Mergenthaler <un1i@rz.uni-karlsruhe.de>
Cc:        freebsd-current@FreeBSD.ORG
Subject:   fix for pageout_flush panic (was Re: panic: vm_pageout_flush: partially dirty page)
Message-ID:  <200012102334.eBANYWm87853@earth.backplane.com>
References:   <20001210033546.A13896@rz.uni-karlsruhe.de>

next in thread | previous in thread | raw e-mail | index | archive | help

:
:
: Hi,
:
:ever since this commit: ...
:
:dillon      2000/11/18 15:06:27 PST
: 
:   Modified files:
:    sys/kern             vfs_bio.c vfs_cluster.c vfs_subr.c

    Hmm.  Very odd.  It's catching a fully valid file page which is 
    marked partially dirty, less then a kilobyte in size, mapped
    into memory but not associated with a buffer.  m->dirty is
    0xFC (roughly equivalent to 3584 bytes, but the file is only 932
    bytes long.

    I'm not sure how it is possible for the above situation to
    occur.  No, I take that back... I see one possibility related
    to ftruncate()ing a file, where a file is partially dirtied, mapped
    into memory, and then ftruncate()ed.  I'll look into that.

    This is -current, it could be related to the ongoing work in -current, it
    has been reported to the list that -j buildworlds don't survive long but
    I don't know if that is true on single-cpu -current's or just for MP
    current's.

    You can revert my KASSERT to get rid of the panic but at this time I
    think my KASSERT is correct, and some piece of code somewhere is
    blowing something up.

    I would recommend *NOT* using -current for a production news machine!!!!
    If you can repeat the problem under -stable (which has the same patch
    set), that will give me more of a base to work from.  I'll track down the
    one case I can think of to see if I can reproduce the bug.

						-Matt


Index: sys/vm/vm_pageout.c
===================================================================
RCS file: /home/ncvs/src/sys/vm/vm_pageout.c,v
retrieving revision 1.151.2.5
diff -u -r1.151.2.5 vm_pageout.c
--- vm_pageout.c	2000/11/26 02:55:14	1.151.2.5
+++ vm_pageout.c	2000/12/10 22:50:43
@@ -372,7 +372,7 @@
 	 */
 
 	for (i = 0; i < count; i++) {
-		KASSERT(mc[i]->valid == VM_PAGE_BITS_ALL && mc[i]->dirty == VM_PAGE_BITS_ALL, ("vm_pageout_flush page %p index %d/%d: partially dirty page", mc[i], i, count));
+		KASSERT(mc[i]->valid == VM_PAGE_BITS_ALL, ("vm_pageout_flush page %p index %d/%d: partially dirty page", mc[i], i, count));
 		vm_page_io_start(mc[i]);
 		vm_page_protect(mc[i], VM_PROT_READ);
 	}


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200012102334.eBANYWm87853>