kern/108151: panic: relpbuf with vp
Tor Egge
Tor.Egge at cvsup.no.freebsd.org
Sun Jan 21 02:10:22 UTC 2007
The following reply was made to PR kern/108151; it has been noted by GNATS.
From: Tor Egge <Tor.Egge at cvsup.no.freebsd.org>
To: netchild at freebsd.org
Cc: FreeBSD-gnats-submit at freebsd.org
Subject: Re: kern/108151: panic: relpbuf with vp
Date: Sun, 21 Jan 2007 01:23:52 +0000 (UTC)
----Next_Part(Sun_Jan_21_01:23:52_2007_708)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
ffs_rawread_main() should call pbgetvp()/pbrelvp() instead of just setting
b_vp directly. A suggested fix is enclosed.
- Tor Egge
----Next_Part(Sun_Jan_21_01:23:52_2007_708)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="rawread.diff"
Index: sys/ufs/ffs/ffs_rawread.c
===================================================================
RCS file: /home/ncvs/src/sys/ufs/ffs/ffs_rawread.c,v
retrieving revision 1.28
diff -u -r1.28 ffs_rawread.c
--- sys/ufs/ffs/ffs_rawread.c 5 May 2006 21:27:31 -0000 1.28
+++ sys/ufs/ffs/ffs_rawread.c 21 Jan 2007 00:05:47 -0000
@@ -310,7 +310,7 @@
/* XXX: Leave some bufs for swap */
bp = getpbuf(&ffsrawbufcnt);
sa = bp->b_data;
- bp->b_vp = vp;
+ pbgetvp(vp, bp);
error = ffs_rawread_readahead(vp, udata, offset,
resid, td, bp, sa);
if (error != 0)
@@ -324,7 +324,7 @@
nbp = NULL;
if (nbp != NULL) {
nsa = nbp->b_data;
- nbp->b_vp = vp;
+ pbgetvp(vp, nbp);
nerror = ffs_rawread_readahead(vp,
udata +
@@ -337,6 +337,7 @@
nbp,
nsa);
if (nerror) {
+ pbrelvp(nbp);
relpbuf(nbp, &ffsrawbufcnt);
nbp = NULL;
}
@@ -385,6 +386,7 @@
nsa = tsa;
if (resid <= bp->b_bufsize) { /* No more readaheads */
+ pbrelvp(nbp);
relpbuf(nbp, &ffsrawbufcnt);
nbp = NULL;
} else { /* Setup next readahead */
@@ -399,6 +401,7 @@
nbp,
nsa);
if (nerror != 0) {
+ pbrelvp(nbp);
relpbuf(nbp, &ffsrawbufcnt);
nbp = NULL;
}
@@ -413,13 +416,16 @@
}
}
- if (bp != NULL)
+ if (bp != NULL) {
+ pbrelvp(bp);
relpbuf(bp, &ffsrawbufcnt);
+ }
if (nbp != NULL) { /* Run down readahead buffer */
spl = splbio();
bwait(nbp, PRIBIO, "rawrd");
splx(spl);
vunmapbuf(nbp);
+ pbrelvp(nbp);
relpbuf(nbp, &ffsrawbufcnt);
}
----Next_Part(Sun_Jan_21_01:23:52_2007_708)----
More information about the freebsd-bugs
mailing list