diff options
| -rw-r--r-- | block/cfq-iosched.c | 4 | ||||
| -rw-r--r-- | include/linux/ioprio.h | 14 | 
2 files changed, 16 insertions, 2 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 7f909d2f488..b399c62936e 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -1303,10 +1303,10 @@ static void cfq_init_prio_data(struct cfq_queue *cfqq, struct io_context *ioc)  		printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class);  	case IOPRIO_CLASS_NONE:  		/* -		 * no prio set, place us in the middle of the BE classes +		 * no prio set, inherit CPU scheduling settings  		 */  		cfqq->ioprio = task_nice_ioprio(tsk); -		cfqq->ioprio_class = IOPRIO_CLASS_BE; +		cfqq->ioprio_class = task_nice_ioclass(tsk);  		break;  	case IOPRIO_CLASS_RT:  		cfqq->ioprio = task_ioprio(ioc); diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h index 2a3bb1bb743..f98a656b17e 100644 --- a/include/linux/ioprio.h +++ b/include/linux/ioprio.h @@ -68,6 +68,20 @@ static inline int task_nice_ioprio(struct task_struct *task)  }  /* + * This is for the case where the task hasn't asked for a specific IO class. + * Check for idle and rt task process, and return appropriate IO class. + */ +static inline int task_nice_ioclass(struct task_struct *task) +{ +	if (task->policy == SCHED_IDLE) +		return IOPRIO_CLASS_IDLE; +	else if (task->policy == SCHED_FIFO || task->policy == SCHED_RR) +		return IOPRIO_CLASS_RT; +	else +		return IOPRIO_CLASS_BE; +} + +/*   * For inheritance, return the highest of the two given priorities   */  extern int ioprio_best(unsigned short aprio, unsigned short bprio);  |