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>