Date: Wed, 20 Jan 1999 23:00:34 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Luoqi Chen <luoqi@watermarkgroup.com> Cc: current@FreeBSD.ORG Subject: Re: panic: vinvalbuf: dirty bufs (during reboot, several times) Message-ID: <199901210700.XAA10740@apollo.backplane.com> References: <199901210536.AAA08007@lor.watermarkgroup.com>
next in thread | previous in thread | raw e-mail | index | archive | help
:Sorry, Matt, the patch in my previous email was fatally flawed. Try this one :below. The two printf() messages don't necessarily come out in pairs and :it's not just NFS bufs' B_CACHE bits are cleared, so my comment about :vm_page_is_valid() check in my previous message was wrong and the check is :needed here. : :-lq Ok, I understand what you've done... you are effectively bypassing having to check for B_DELWRI in bread(), breadn(), and nfs_bioread() by forcing getblk() to handle the B_DELWRI condition. Cool. I'll replace my nfs_bioread() patch with this one and test it before committing all this stuff to the -4.x branch ( which I will also do sometime tonight ). I am also CCing this to current so Greg and Andreas are kept abrest of events. I think this will fix *both* of their reported panics. -Matt Matthew Dillon <dillon@backplane.com> :Index: vfs_bio.c :=================================================================== :RCS file: /home/ncvs/src/sys/kern/vfs_bio.c,v :retrieving revision 1.193 :diff -u -r1.193 vfs_bio.c :--- vfs_bio.c 1999/01/19 08:00:51 1.193 :+++ vfs_bio.c 1999/01/21 05:26:10 :@@ -1437,6 +1437,11 @@ : : if (bp->b_bcount != size) { : if ((bp->b_flags & B_VMIO) && (size <= bp->b_kvasize)) { :+printf("getblk: extending buf %ld->%d\n", bp->b_bcount, size); :+ if (bp->b_flags & B_DELWRI) { :+ VOP_BWRITE(bp); :+ goto loop; :+ } : allocbuf(bp, size); : } else { : if (bp->b_flags & B_DELWRI) { :@@ -1471,6 +1476,8 @@ : resid = (checksize > (PAGE_SIZE - poffset)) ? : (PAGE_SIZE - poffset) : checksize; : if (!vm_page_is_valid(bp->b_pages[i], poffset, resid)) { :+printf("getblk: clear B_CACHE, bufsize %ld, page %d valid %02x dirty %02x\n", :+ bp->b_bufsize, i, bp->b_pages[i]->valid, bp->b_pages[i]->dirty); : bp->b_flags &= ~(B_CACHE | B_DONE); : break; : } : 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?199901210700.XAA10740>