: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 
                                        <[EMAIL PROTECTED]>

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);
 

Reply via email to