Skip site navigation (1)Skip section navigation (2)
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>