Hello,
I think I have found a solution to the problem of
raid5 resync running forever in the 2.2.8-10 kernels.
There is a test in md_do_sync() in drivers/block/md.c that plays with
current priority depending on io usage and the "speed_limit". Just hack
out all but the last line of that test. Here's the code with the ifdefs
/////////////////////////////////////////////////////////////////////////
/*
* this loop exits only if either when we are slower than
* the 'hard' speed limit, or the system was IO-idle for
* a jiffy.
* the system might be non-idle CPU-wise, but we only care
* about not overloading the IO subsystem. (things like an
* e2fsck being done on the RAID array should execute fast)
*/
repeat:
if (md_need_resched())
schedule();
#if 0
if ((blocksize/1024)*j/((jiffies-starttime)/HZ + 1) + 1
> sysctl_speed_limit) {
current->priority = 0;
if (!is_mddev_idle(mddev)) {
current->state = TASK_INTERRUPTIBLE;
md_schedule_timeout(HZ/2);
goto repeat;
}
} else
#endif
current->priority = 40;
}
fsync_dev(read_disk);
printk(KERN_INFO "md: md%d: sync done.\n",mdidx(mddev));
err = 0;
////////////////////////////////////////////////////////////////////
No guarantees, it works for me.
johna