Disk priority dependend on nice level...

Pavel Machek
2003-08-06T23:29:16Z

Hi!

I ported `subj` to 2.6.0-test2. I do not yet have idea if it works,
but it compiles ;-).
Pavel

--- clean/drivers/block/deadline-iosched.c 2003-07-27 22:31:10.000000000 +0200
+++ linux/drivers/block/deadline-iosched.c 2003-08-07 01:26:47.000000000 +0200
@@ -17,6 +17,7 @@
#include <linux/compiler.h>
#include <linux/hash.h>
#include <linux/rbtree.h>
+#include <linux/sched.h>

/*
* See Documentation/deadline-iosched.txt
@@ -106,6 +107,19 @@
#define RQ_DATA(rq) ((struct deadline_rq *) (rq)->elevator_private)

/*
+ * scale_deadline
+ */
+static int scale_deadline(int default_deadline)
+{
+ int prio = current->static_prio - MAX_RT_PRIO;
+ /* make priorities higher than nice -10 equal to nice -10 */
+ if (prio < 10)
+ prio = 10;
+ /* scale the deadline according to priority */
+ return default_deadline * prio/20;
+}
+
+/*
* the back merge hash support functions
*/
static inline void __deadline_del_drq_hash(struct deadline_rq *drq)
@@ -303,7 +317,7 @@
/*
* set expire time (only used for reads) and add to fifo list
*/
- drq->expires = jiffies + dd->fifo_expire[data_dir];
+ drq->expires = jiffies + scale_deadline(dd->fifo_expire[data_dir]);
list_add_tail(&drq->fifo, &dd->fifo_list[data_dir]);
}

--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]