--- linux-2.6.14-old/kernel/sched.c	2006-11-29 16:22:22.000000000 -0600
+++ linux-2.6.14/kernel/sched.c	2006-11-29 11:29:34.000000000 -0600
@@ -2598,12 +2598,24 @@
 
 		if (!rq->expired_timestamp)
 			rq->expired_timestamp = jiffies;
-		if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) {
-			enqueue_task(p, rq->expired);
-			if (p->static_prio < rq->best_expired_prio)
+		if(p->backlog_flag == 0){
+			if (!TASK_INTERACTIVE(p) || EXPIRED_STARVING(rq)) {
+				enqueue_task(p, rq->expired);
+				if (p->static_prio < rq->best_expired_prio)
+					rq->best_expired_prio = p->static_prio;
+			} else
+				enqueue_task(p, rq->active);
+		} else {
+			if(EXPIRED_STARVING(rq)) {
+				enqueue_task(p,rq->expired);
+				if (p->static_prio < rq->best_expired_prio)
 				rq->best_expired_prio = p->static_prio;
-		} else
-			enqueue_task(p, rq->active);
+			} else {
+				if(!TASK_INTERACTIVE(p))
+					p->extrarun_flag = 1;
+				enqueue_task(p,rq->active);
+			}	
+		}
 	} else {
 		/*
 		 * Prevent a too long timeslice allowing a task to monopolize
