Date: Thu, 2 Jul 1998 21:30:11 +0200 From: Eivind Eklund <eivind@yes.no> To: Kevin Day <toasty@home.dragondata.com>, Andreas Klemm <andreas@klemm.gtn.com> Cc: current@FreeBSD.ORG Subject: Re: -current wishlist Message-ID: <19980702213011.35162@follo.net> In-Reply-To: <199807021520.KAA18837@home.dragondata.com>; from Kevin Day on Thu, Jul 02, 1998 at 10:20:51AM -0500 References: <19980702102856.A11204@klemm.gtn.com> <199807021520.KAA18837@home.dragondata.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, Jul 02, 1998 at 10:20:51AM -0500, Kevin Day wrote: > > On Wed, Jul 01, 1998 at 10:22:08PM -0500, Kevin Day wrote: > > > > > > I don't know if there's a Santa Claus on -current right now, but I've got a > > > few suggestions/weak spots I see in -current now, and would be more than > > > willing to help anyone wanting to work on these. I'm not that deep into the > > > mysteries of the kernel to just do it myself, but I'm a willing test > > > subject. :) > > > [...] > > > 5) Fix ccd under SMP > > > [...] > > > > What problems ? > > > > I get random 'Page fault while in kernel mode', then lockups before I can do > a trace. Seperating the two drives into non-ccd paritions makes it go away, > adding them back as a ccd drive starts it again.. Is it just me? :) These fix a couple of reasons for such problems, I think. They're completely untested. Feel free to test them :-) They're part of a large fix-set I've got; unfortunately, the (commercial) tools I use to find problems require a lot of 'pointless' changes, including error control comments. This means that extracting individual fixes such as the below can be quite a bit of work, and committing the 'pointless' changes has been deemed deterimental to everybody that don't have the tools... Index: ccd.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ccd/ccd.c,v retrieving revision 1.32 diff -u -r1.32 ccd.c --- ccd.c 1998/03/09 20:39:26 1.32 +++ ccd.c 1998/05/31 01:10:56 @@ -427,7 +433,7 @@ printf("ccd%d: interleave must be at least %d\n", ccd->ccd_unit, (maxsecsize / DEV_BSIZE)); #endif - while (ci >= cs->sc_cinfo) { + while (ci && ci >= cs->sc_cinfo) { free(ci->ci_path, M_DEVBUF); ci--; } @@ -792,14 +801,16 @@ rcount = cbp[0]->cb_buf.b_bcount; if ((cbp[0]->cb_buf.b_flags & B_READ) == 0) cbp[0]->cb_buf.b_vp->v_numoutput++; - VOP_STRATEGY(&cbp[0]->cb_buf); + /* XXX VOP_STRATEGY can fail - add error checking? */ + (void)VOP_STRATEGY(&cbp[0]->cb_buf); if (cs->sc_cflags & CCDF_MIRROR && (cbp[0]->cb_buf.b_flags & B_READ) == 0) { /* mirror, start another write */ cbp[1]->cb_buf.b_vp->v_numoutput++; - VOP_STRATEGY(&cbp[1]->cb_buf); + /* XXX VOP_STRATEGY can fail - add error checking? */ + (void)VOP_STRATEGY(&cbp[1]->cb_buf); } bn += btodb(rcount); addr += rcount; } } @@ -918,7 +929,8 @@ #endif cb[0] = cbp; if (cs->sc_cflags & CCDF_MIRROR && - (cbp->cb_buf.b_flags & B_READ) == 0) { + (cbp->cb_buf.b_flags & B_READ) == 0 + && ci2) { /* mirror, start one more write */ cbp = getccdbuf(); bzero(cbp, sizeof (struct ccdbuf)); Eivind. 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?19980702213011.35162>