diff -urN oldtree/block/cfq-iosched.c newtree/block/cfq-iosched.c --- oldtree/block/cfq-iosched.c 2006-09-26 15:08:09.000000000 -0400 +++ newtree/block/cfq-iosched.c 2006-09-26 15:10:58.000000000 -0400 @@ -1182,6 +1182,10 @@ */ cfqq->ioprio_class = task_policy_ioprio_class(tsk); cfqq->ioprio = task_nice_ioprio(tsk); +#ifdef CONFIG_STAIRCASE + if (cfqq->ioprio_class == IOPRIO_CLASS_IDLE) + cfq_clear_cfqq_idle_window(cfqq); +#endif break; case IOPRIO_CLASS_RT: cfqq->ioprio = task_ioprio(tsk); diff -urN oldtree/include/linux/ioprio.h newtree/include/linux/ioprio.h --- oldtree/include/linux/ioprio.h 2006-09-26 15:08:09.000000000 -0400 +++ newtree/include/linux/ioprio.h 2006-09-26 15:10:17.000000000 -0400 @@ -56,6 +56,10 @@ { if (rt_task(task)) return IOPRIO_CLASS_RT; +#ifdef CONFIG_STAIRCASE + if (idleprio_task(task)) + return IOPRIO_CLASS_IDLE; +#endif return IOPRIO_CLASS_BE; } @@ -64,6 +68,12 @@ if (rt_task(task)) return (MAX_RT_PRIO - task->rt_priority) * IOPRIO_BE_NR / (MAX_RT_PRIO + 1); +#ifdef CONFIG_STAIRCASE + if (iso_task(task)) + return 0; + if (idleprio_task(task)) + return IOPRIO_BE_NR - 1; +#endif return (task_nice(task) + 20) / 5; }