diff -Naurp sreadahead-0.02/readahead.c sreadahead-0.02-nice/readahead.c --- sreadahead-0.02/readahead.c 2008-11-06 00:57:17.000000000 -0500 +++ sreadahead-0.02-nice/readahead.c 2008-11-06 02:28:29.000000000 -0500 @@ -26,7 +26,18 @@ #include #include "readahead.h" +#include +# if defined(__i386__) +# define __NR_ioprio_set 289 +# elif defined(__x86_64__) +# define __NR_ioprio_set 251 +# else +# error "Unsupported arch" +# endif + +#define IOPRIO_WHO_PROCESS 1 +#define IOPRIO_CLASS_SHIFT 13 #define MAXR 1024 static struct readahead files[MAXR]; static unsigned int total_files = 0; @@ -68,7 +79,15 @@ void *one_thread(void *ptr) int main(int argc, char **argv) { - FILE *file = fopen("/etc/readahead.packed", "r"); + int iopriority = 7; /* hard code for idle */ + int iopriority_class = 3; /* 3 stands for idle */ + int pid = 0; + FILE *file; + + if (syscall(__NR_ioprio_set, IOPRIO_WHO_PROCESS, pid, iopriority | iopriority_class << IOPRIO_CLASS_SHIFT) == -1) + perror("Can not set priority to idle class"); + + file = fopen("/etc/readahead.packed", "r"); if (!file) { perror("Couldnt open /etc/readahead.packed"); return -errno;