DragonFly kernel List (threaded) for 2007-07
DragonFly BSD
DragonFly kernel List (threaded) for 2007-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: disklabel -r -W md0s0 enters into debugger


From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 31 Jul 2007 16:11:01 -0700 (PDT)

:I bet it's been fixed. Would like to know where.
:
:Cheers
:kmb

     Yah.  1.17 /usr/src/sys/dev/disk/md/md.c.   'bp' was not being
     properly derived from the bio so a stale bp was being tested,
     allowing a NULL bio to pass through the check.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>

Index: md.c
===================================================================
RCS file: /cvs/src/sys/dev/disk/md/md.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -p -r1.16 -r1.17
--- md.c	15 May 2007 00:01:03 -0000	1.16
+++ md.c	31 Jul 2007 20:04:48 -0000	1.17
@@ -7,7 +7,7 @@  * this stuff is worth it, you can buy m
  * ----------------------------------------------------------------------------
  *
  * $FreeBSD: src/sys/dev/md/md.c,v 1.8.2.2 2002/08/19 17:43:34 jdp Exp $
- * $DragonFly: src/sys/dev/disk/md/md.c,v 1.16 2007/05/15 00:01:03 dillon Exp $
+ * $DragonFly: src/sys/dev/disk/md/md.c,v 1.17 2007/07/31 20:04:48 dillon Exp $
  *
  */
 
@@ -182,11 +182,13 @@ 	sc->busy++;
 	
 	while (1) {
 		bio = bioq_first(&sc->bio_queue);
-		if (bp)
-			bioq_remove(&sc->bio_queue, bio);
-		crit_exit();
-		if (bio == NULL)
+		if (bio == NULL) {
+			crit_exit();
 			break;
+		}
+		crit_exit();
+		bioq_remove(&sc->bio_queue, bio);
+		bp = bio->bio_buf;
 
 		devstat_start_transaction(&sc->stats);
 



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]