Messages in this thread Patch in this message |  | | | Date | Tue, 3 Nov 2009 21:28:36 +0100 | | From | Jens Axboe <> | | Subject | Re: Fwd: [PATCH 0/5] cfq-iosched: improve latency for no-idle queues (v3) |
| |
On Tue, Nov 03 2009, Jeff Moyer wrote: > Jens Axboe <jens.axboe@oracle.com> writes: > > > Since for-linus contains conflicting changes, can you and Jeff please > > double check that everything is still in order? The interesting bit here > > is the merge with for-2.6.33 and the coop limit from Shaohua Li. I did > > the straight forward merge, but we likely just need to drop that logic > > since the coop concept is radically different given that we merge and > > break queues in for-2.6.33. > > Yeah, since I changed the meaning of the cfqq_coop flag, a lot of those > tests are just plain wrong. Let me play with it and I'll send you an > incremental patch in a bit.
Thanks, here's what I have. It's basically a revert of the commit in question.
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index b700f41..4ab240c 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -253,7 +253,6 @@ enum cfqq_state_flags { CFQ_CFQQ_FLAG_slice_new, /* no requests dispatched in slice */ CFQ_CFQQ_FLAG_sync, /* synchronous queue */ CFQ_CFQQ_FLAG_coop, /* cfqq is shared */ - CFQ_CFQQ_FLAG_coop_preempt, /* coop preempt */ }; #define CFQ_CFQQ_FNS(name) \ @@ -280,7 +279,6 @@ CFQ_CFQQ_FNS(prio_changed); CFQ_CFQQ_FNS(slice_new); CFQ_CFQQ_FNS(sync); CFQ_CFQQ_FNS(coop); -CFQ_CFQQ_FNS(coop_preempt); #undef CFQ_CFQQ_FNS #define cfq_log_cfqq(cfqd, cfqq, fmt, args...) \ @@ -1070,16 +1068,9 @@ static struct cfq_queue *cfq_get_next_queue(struct cfq_data *cfqd) static struct cfq_queue *cfq_set_active_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq) { - if (!cfqq) { + if (!cfqq) cfqq = cfq_get_next_queue(cfqd); - if (cfqq && !cfq_cfqq_coop_preempt(cfqq)) - cfq_clear_cfqq_coop(cfqq); - } - - if (cfqq) - cfq_clear_cfqq_coop_preempt(cfqq); - __cfq_set_active_queue(cfqd, cfqq); return cfqq; } @@ -2433,16 +2424,8 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq, * if this request is as-good as one we would expect from the * current cfqq, let it preempt */ - if (cfq_rq_close(cfqd, cfqq, rq) && (!cfq_cfqq_coop(new_cfqq) || - cfqd->busy_queues == 1)) { - /* - * Mark new queue coop_preempt, so its coop flag will not be - * cleared when new queue gets scheduled at the very first time - */ - cfq_mark_cfqq_coop_preempt(new_cfqq); - cfq_mark_cfqq_coop(new_cfqq); + if (cfq_rq_close(cfqd, cfqq, rq)) return true; - } return false; } -- Jens Axboe
|  |