--- ./drivers/block/raid1.c.~1~	Wed Aug  2 17:00:30 2000
+++ ./drivers/block/raid1.c	Wed Aug  2 18:55:55 2000
@@ -111,7 +111,7 @@
 	 * this branch is our 'one mirror IO has finished' event handler:
 	 */
 	if (!uptodate)
-		md_error (bh->b_dev, bh->b_rdev);
+		md_error (r1_bh->mddev, bh->b_rdev);
 	else {
 		/*
 		 * Set BH_Uptodate in our master buffer_head, so that
@@ -143,7 +143,7 @@
 		 * oops, read error:
 		 */
 		printk(KERN_ERR "raid1: %s: rescheduling block %lu\n", 
-			 partition_name(bh->b_dev), bh->b_blocknr);
+			 partition_name(mddev_to_kdev(r1_bh->mddev)), bh->b_blocknr);
 		raid1_reschedule_retry(bh);
 		restore_flags(flags);
 		return;
@@ -766,7 +766,7 @@
 		raid1_retry_list = r1_bh->next_retry;
 		restore_flags(flags);
 
-		mddev = kdev_to_mddev(bh->b_dev);
+		mddev = r1_bh->mddev;
 		if (mddev->sb_dirty) {
 			printk(KERN_INFO "dirty sb detected, updating.\n");
 			mddev->sb_dirty = 0;
@@ -776,11 +776,11 @@
 		__raid1_map (mddev, &bh->b_rdev, &bh->b_rsector,
 							 bh->b_size >> 9);
 		if (bh->b_rdev == dev) {
-			printk (IO_ERROR, partition_name(bh->b_dev), bh->b_blocknr);
+			printk (IO_ERROR, partition_name(mddev_to_kdev(mddev)), bh->b_blocknr);
 			raid1_end_bh_io(r1_bh, 0);
 		} else {
 			printk (REDIRECT_SECTOR,
-				partition_name(bh->b_dev), bh->b_blocknr);
+				partition_name(mddev_to_kdev(mddev)), bh->b_blocknr);
 			map_and_make_request (r1_bh->cmd, bh);
 		}
 	}
--- ./drivers/block/raid5.c.~1~	Wed Aug  2 17:00:30 2000
+++ ./drivers/block/raid5.c	Wed Aug  2 18:56:14 2000
@@ -529,7 +529,7 @@
 	bh->b_end_io(bh, uptodate);
 	if (!uptodate)
 		printk(KERN_ALERT "raid5: %s: unrecoverable I/O error for "
-		       "block %lu\n", partition_name(bh->b_dev), bh->b_blocknr);
+		       "block %lu\n", partition_name(mddev_to_kdev(sh->raid_conf->mddev)), bh->b_blocknr);
 }
 
 static inline void raid5_mark_buffer_uptodate (struct buffer_head *bh, int uptodate)
@@ -555,7 +555,7 @@
 		atomic_inc(&conf->nr_handle);
 	}
 	if (!uptodate) {
-		md_error(bh->b_dev, bh->b_rdev);
+		md_error(conf->mddev, bh->b_rdev);
 	}
 	if (conf->failed_disks) {
 		for (i = 0; i < disks; i++) {
--- ./drivers/block/md.c.~1~	Wed Aug  2 17:00:30 2000
+++ ./drivers/block/md.c	Wed Aug  2 18:32:09 2000
@@ -2489,7 +2489,7 @@
 	int ret;
 
 	fsync_dev(mddev_to_kdev(mddev));
-	ret = md_error(mddev_to_kdev(mddev), dev);
+	ret = md_error(mddev, dev);
 	return ret;
 }
 
@@ -2898,7 +2898,7 @@
 int md_make_request (struct buffer_head * bh, int rw)
 {
 	int err;
-	mddev_t *mddev = kdev_to_mddev(bh->b_dev);
+	mddev_t *mddev = kdev_to_mddev(bh->b_rdev);
 
 	if (!mddev || !mddev->pers) {
 		err = -ENXIO;
@@ -3067,9 +3067,8 @@
 }
 
 
-int md_error (kdev_t dev, kdev_t rdev)
+int md_error (mddev_t *mddev, kdev_t rdev)
 {
-	mddev_t *mddev = kdev_to_mddev(dev);
 	mdk_rdev_t * rrdev;
 	int rc;
 
--- ./include/linux/raid/md.h.~1~	Wed Aug  2 18:51:43 2000
+++ ./include/linux/raid/md.h	Wed Aug  2 18:54:18 2000
@@ -87,6 +87,7 @@
 #ifdef CONFIG_MD_BOOT
 extern void md_setup(char *str,int *ints) md__init;
 #endif
+extern int md_error (mddev_t * mddev, kdev_t rdev);
 
 extern void md_print_devices (void);
 
--- ./include/linux/blkdev.h.~1~	Wed Aug  2 17:00:30 2000
+++ ./include/linux/blkdev.h	Wed Aug  2 18:53:06 2000
@@ -96,7 +96,6 @@
 extern int md_map (kdev_t dev, kdev_t *rdev,
 				 unsigned long *rsector, unsigned long size);
 extern int md_make_request (struct buffer_head * bh, int rw);
-extern int md_error (kdev_t mddev, kdev_t rdev);
 
 extern int * blk_size[MAX_BLKDEV];