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

Reply via email to