diff -NurpP --minimal linux-2.6.22.19-vs2.3.0.34.1/kernel/vserver/sched.c linux-2.6.22.19-vs2.3.0.34.2/kernel/vserver/sched.c --- linux-2.6.22.19-vs2.3.0.34.1/kernel/vserver/sched.c 2008-05-15 17:34:06 +0200 +++ linux-2.6.22.19-vs2.3.0.34.2/kernel/vserver/sched.c 2008-05-15 17:44:12 +0200 @@ -161,11 +161,12 @@ on_hold: /* next interval? */ if (!sched_pc->fill_rate[0]) delta_min[0] = HZ; - else if (tokens > sched_pc->fill_rate[0]) - delta_min[0] += sched_pc->interval[0] * - tokens / sched_pc->fill_rate[0]; - else + else { delta_min[0] = sched_pc->interval[0] - delta_min[0]; + if (tokens > sched_pc->fill_rate[0]) + delta_min[0] += sched_pc->interval[0] * + tokens / sched_pc->fill_rate[0]; + } vxd_check_range(delta_min[0], 0, INT_MAX); #ifdef CONFIG_VSERVER_IDLETIME @@ -175,11 +176,12 @@ on_hold: /* next interval? */ if (!sched_pc->fill_rate[1]) delta_min[1] = HZ; - else if (tokens > sched_pc->fill_rate[1]) - delta_min[1] += sched_pc->interval[1] * - tokens / sched_pc->fill_rate[1]; - else + else { delta_min[1] = sched_pc->interval[1] - delta_min[1]; + if (tokens > sched_pc->fill_rate[1]) + delta_min[1] += sched_pc->interval[1] * + tokens / sched_pc->fill_rate[1]; + } vxd_check_range(delta_min[1], 0, INT_MAX); return -2;