--- linux/drivers/md/md.c.orig Thu Apr 17 17:17:38 2003 +++ linux/drivers/md/md.c Thu Apr 17 17:17:29 2003 @@ -997,6 +997,7 @@ int err, count = 100; struct md_list_head *tmp; mdk_rdev_t *rdev; + int i; if (!mddev->sb_dirty) { printk("hm, md_update_sb() called without ->sb_dirty == 1, from %p.\n", __builtin_return_address(0)); @@ -1030,6 +1031,7 @@ mdidx(mddev)); err = 0; + i = 0; ITERATE_RDEV(mddev,rdev,tmp) { dprintk("md: "); if (rdev->faulty) @@ -1044,6 +1046,11 @@ err += write_disk_sb(rdev); } else dprintk(")\n"); + if (i >= mddev->nb_dev) { /* safety valve - ARC*/ + printk("md_update_sb: iterate_rdev limit (%d) reached\n",i); + break; + } + i++; } if (err) { if (--count) {