Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Aug 1999 16:30:39 +0930
From:      Greg Lehey <grog@lemis.com>
To:        Bernd Walter <ticso@cicely.de>
Cc:        Matthew Dillon <dillon@apollo.backplane.com>, Mike Smith <mike@smith.net.au>, Parag Patel <parag@cgt.com>, freebsd-current@FreeBSD.ORG
Subject:   Re: 4.0-CURRENT SMP crash with vinum raid-5 and softupdates
Message-ID:  <19990830163039.L13904@freebie.lemis.com>
In-Reply-To: <19990830161715.K13904@freebie.lemis.com>; from Greg Lehey on Mon, Aug 30, 1999 at 04:17:15PM %2B0930
References:  <199908292224.PAA15435@dingo.cdrom.com> <199908292348.QAA07774@apollo.backplane.com> <19990830075311.A30271@cicely8.cicely.de> <199908300559.WAA09987@apollo.backplane.com> <19990830080603.B30271@cicely8.cicely.de> <19990830161715.K13904@freebie.lemis.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--jho1yZJdad60DJr+
Content-Type: text/plain; charset=us-ascii

On Monday, 30 August 1999 at 16:17:15 +0930, Greg Lehey wrote:
> On Monday, 30 August 1999 at  8:06:03 +0200, Bernd Walter wrote:
>> On Sun, Aug 29, 1999 at 10:59:22PM -0700, Matthew Dillon wrote:
>>>
>>>     This is definitely a pbuf.  Did you apply the patches Greg emailed?
>>
>> Not yet.
>> I will do it today.
>
> Wait a while.  I'll send you another couple as well.

OK, I'm attaching the patches.  You'll need to build a new kernel, a
new Vinum kld and a new vinum(8).  Let me know if you have any
problems.

Greg
--
See complete headers for address, home page and phone numbers
finger grog@lemis.com for PGP public key

--jho1yZJdad60DJr+
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=patches

Index: dev/vinum/request.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/vinum/request.h,v
retrieving revision 1.13
diff -w -u -r1.13 request.h
--- request.h	1999/08/28 00:42:37	1.13
+++ request.h	1999/08/30 05:33:13
@@ -202,7 +202,7 @@
     } info;
 };
 
-#define RQINFO_SIZE 128					    /* number of info slots in buffer */
+#define RQINFO_SIZE 512					    /* number of info slots in buffer */
 
 void logrq(enum rqinfo_type type, union rqinfou info, struct buf *ubp);
 #endif
Index: dev/vinum/vinuminterrupt.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/vinum/vinuminterrupt.c,v
retrieving revision 1.19
diff -w -u -r1.19 vinuminterrupt.c
--- vinuminterrupt.c	1999/08/28 00:42:39	1.19
+++ vinuminterrupt.c	1999/08/30 06:58:06
@@ -352,6 +352,10 @@
 		    if (debug & DEBUG_LASTREQS)
 			logrq(loginfo_raid5_data, (union rqinfou) rqe, bp);
 #endif
+		    if ((bp->b_flags & B_CALL)
+		        && (bp->b_iodone == NULL) )
+			    Debugger("complete_raid5_write");
+		    bp->b_flags |= B_XXX;			    /* mark our own */
 		    BUF_STRATEGY(&rqe->b, 0);
 		}
 	    }
@@ -388,5 +392,9 @@
     if (debug & DEBUG_LASTREQS)
 	logrq(loginfo_raid5_parity, (union rqinfou) rqe, bp);
 #endif
+    if ((bp->b_flags & B_CALL)
+        && (bp->b_iodone == NULL) )
+	    Debugger("complete_raid5_write");
+    bp->b_flags |= B_XXX;			    /* mark our own */
     BUF_STRATEGY(&rqe->b, 0);
 }
Index: dev/vinum/vinumrequest.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/vinum/vinumrequest.c,v
retrieving revision 1.35
diff -w -u -r1.35 vinumrequest.c
--- vinumrequest.c	1999/08/28 00:42:42	1.35
+++ vinumrequest.c	1999/08/30 06:57:00
@@ -396,6 +396,11 @@
 		if (debug & DEBUG_LASTREQS)
 		    logrq(loginfo_rqe, (union rqinfou) rqe, rq->bp);
 #endif
+		if ((bp->b_flags & B_CALL)
+		    && (bp->b_iodone == NULL) )
+			Debugger("launch_requests");
+		bp->b_flags |= B_XXX;			    /* mark our own */
+
 		/* fire off the request */
 		BUF_STRATEGY(&rqe->b, 0);
 	    }
Index: kern/subr_diskslice.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/subr_diskslice.c,v
retrieving revision 1.68
diff -w -u -r1.68 subr_diskslice.c
--- subr_diskslice.c	1999/08/28 00:46:17	1.68
+++ subr_diskslice.c	1999/08/30 06:52:03
@@ -265,6 +265,9 @@
 	    && sp->ds_offset != 0) {
 		struct iodone_chain *ic;
 
+		if ((bp->b_flags & B_CALL)
+		    && (bp->b_iodone == NULL) )
+			Debugger("dscheck");
 		ic = malloc(sizeof *ic , M_DEVBUF, M_WAITOK);
 		ic->ic_prev_flags = bp->b_flags;
 		ic->ic_prev_iodone = bp->b_iodone;
@@ -601,6 +604,9 @@
 		      | (bp->b_flags & ~(B_CALL | B_DONE));
 	bp->b_iodone = ic->ic_prev_iodone;
 	bp->b_iodone_chain = ic->ic_prev_iodone_chain;
+	if ((bp->b_flags & B_CALL)
+	    && (bp->b_iodone == NULL) )
+		Debugger("dsiodone");
 	if (!(bp->b_flags & B_READ)
 	    || (!(bp->b_flags & B_ERROR) && bp->b_error == 0)) {
 		msg = fixlabel((char *)NULL, ic->ic_args[1].ia_ptr,
Index: kern/vfs_bio.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/vfs_bio.c,v
retrieving revision 1.227
diff -w -u -r1.227 vfs_bio.c
--- vfs_bio.c	1999/08/28 00:46:23	1.227
+++ vfs_bio.c	1999/08/30 01:31:00
@@ -2576,6 +2576,8 @@
 
 	/* call optional completion function if requested */
 	if (bp->b_flags & B_CALL) {
+		if (bp->b_iodone == NULL)
+			Debugger ("biodone");
 		bp->b_flags &= ~B_CALL;
 		(*bp->b_iodone) (bp);
 		splx(s);

--jho1yZJdad60DJr+--


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?19990830163039.L13904>