[PATCH] cfq-iosched: correctly set ioprio on both targets
authorJens Axboe <axboe@suse.de>
Wed, 14 Jun 2006 07:10:45 +0000 (09:10 +0200)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Fri, 23 Jun 2006 15:10:39 +0000 (17:10 +0200)
Patch originally from Vasily Tarasov <vtaras@sw.ru>

If you set io-priority of process 1 using sys_ioprio_set system call by
another process 2 (like ionice do), then cfq_init_prio_data() function
sets priority of process 2 (current) on queue of process 1 and clears
the flag, that designates change of ioprio.  So the process  1 will work
like with priority of process 2.

I propose not to call cfq_init_prio_data() on io-priority change, but
only mark queue as queue with changed prority.  Every time when new
request comes cfq-scheduler checks for this flag and atomaticaly changes
priority of queue to new value.

Signed-off-by: Jens Axboe <axboe@suse.de>
block/cfq-iosched.c

index 4c4e9cc3ae26890c0b63a8dcbf6aff3c0caa7d7c..84b75f88c2797b20aa2b0cbded3cfd1708cc6e02 100644 (file)
@@ -1388,10 +1388,9 @@ static inline void changed_ioprio(struct cfq_io_context *cic)
                        }
                }
                cfqq = cic->cfqq[SYNC];
-               if (cfqq) {
+               if (cfqq)
                        cfq_mark_cfqq_prio_changed(cfqq);
-                       cfq_init_prio_data(cfqq);
-               }
+
                spin_unlock(cfqd->queue->queue_lock);
        }
 }