Linus, This isn't a bug fix, just a tidy up. Current, md_error - which is called when an underlying device detects an error - takes a kdev_t to identify which md array is affected. It converts this into a mddev_t structure pointer, and in every case, the caller already has the desired structure pointer. This patch changes md_error and the callers to pass an mddev_t instead of a kdev_t NeilBrown --- ./include/linux/raid/md.h 2001/05/16 06:08:41 1.1 +++ ./include/linux/raid/md.h 2001/05/16 06:10:02 1.2 @@ -80,7 +80,7 @@ extern struct gendisk * find_gendisk (kdev_t dev); extern int md_notify_reboot(struct notifier_block *this, unsigned long code, void *x); -extern int md_error (kdev_t mddev, kdev_t rdev); +extern int md_error (mddev_t *mddev, kdev_t rdev); extern int md_run_setup(void); extern void md_print_devices (void); --- ./drivers/md/raid5.c 2001/05/16 05:27:20 1.3 +++ ./drivers/md/raid5.c 2001/05/16 06:10:02 1.4 @@ -412,7 +412,7 @@ spin_lock_irqsave(&conf->device_lock, flags); } } else { - md_error(mddev_to_kdev(conf->mddev), bh->b_dev); + md_error(conf->mddev, bh->b_dev); clear_bit(BH_Uptodate, &bh->b_state); } clear_bit(BH_Lock, &bh->b_state); @@ -440,7 +440,7 @@ md_spin_lock_irqsave(&conf->device_lock, flags); if (!uptodate) - md_error(mddev_to_kdev(conf->mddev), bh->b_dev); + md_error(conf->mddev, bh->b_dev); clear_bit(BH_Lock, &bh->b_state); set_bit(STRIPE_HANDLE, &sh->state); __release_stripe(conf, sh); --- ./drivers/md/md.c 2001/05/16 06:08:41 1.1 +++ ./drivers/md/md.c 2001/05/16 06:10:03 1.2 @@ -2464,7 +2464,7 @@ int ret; fsync_dev(mddev_to_kdev(mddev)); - ret = md_error(mddev_to_kdev(mddev), dev); + ret = md_error(mddev, dev); return ret; } @@ -2938,13 +2938,11 @@ } -int md_error (kdev_t dev, kdev_t rdev) +int md_error (mddev_t *mddev, kdev_t rdev) { - mddev_t *mddev; mdk_rdev_t * rrdev; int rc; - mddev = kdev_to_mddev(dev); /* printk("md_error dev:(%d:%d), rdev:(%d:%d), (caller: %p,%p,%p,%p).\n",MAJOR(dev),MINOR(dev),MAJOR(rdev),MINOR(rdev), __builtin_return_address(0),__builtin_return_address(1),__builtin_return_address(2),__builtin_return_address(3)); */ if (!mddev) { --- ./drivers/md/raid1.c 2001/05/16 05:27:20 1.3 +++ ./drivers/md/raid1.c 2001/05/16 06:10:03 1.4 @@ -388,7 +388,7 @@ * this branch is our 'one mirror IO has finished' event handler: */ if (!uptodate) - md_error (mddev_to_kdev(r1_bh->mddev), bh->b_dev); + md_error (r1_bh->mddev, bh->b_dev); else /* * Set R1BH_Uptodate in our master buffer_head, so that @@ -1426,7 +1426,7 @@ * We don't do much here, just schedule handling by raid1d */ if (!uptodate) - md_error (mddev_to_kdev(r1_bh->mddev), bh->b_dev); + md_error (r1_bh->mddev, bh->b_dev); else set_bit(R1BH_Uptodate, &r1_bh->state); raid1_reschedule_retry(r1_bh); @@ -1437,7 +1437,7 @@ struct raid1_bh * r1_bh = (struct raid1_bh *)(bh->b_private); if (!uptodate) - md_error (mddev_to_kdev(r1_bh->mddev), bh->b_dev); + md_error (r1_bh->mddev, bh->b_dev); if (atomic_dec_and_test(&r1_bh->remaining)) { mddev_t *mddev = r1_bh->mddev; unsigned long sect = bh->b_blocknr * (bh->b_size>>9); - To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to [EMAIL PROTECTED]