--- ./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];