From 406aef56e3cd3857382b612e647d32c5cfca9fee Mon Sep 17 00:00:00 2001 From: Shaohua Li writes Date: Mon, 13 Dec 2010 14:32:22 +0100 Subject: [PATCH] --- yaml --- r: 230595 b: refs/heads/master c: e4ea0c16a85d221ebcc3a21f32e321440459e0fc h: refs/heads/master i: 230593: d40d65cf1a1a0f07d2168e70a0e811b283676ace 230591: da825cffd67607c52e6dc486a104f3e26276cb8b v: v3 --- [refs] | 2 +- trunk/block/cfq-iosched.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 324ff849c568..214d7387eed3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 760701bfe14faee8ea0608a9cab2046071d98a39 +refs/heads/master: e4ea0c16a85d221ebcc3a21f32e321440459e0fc diff --git a/trunk/block/cfq-iosched.c b/trunk/block/cfq-iosched.c index 5d0349d602fe..9b186fd6bf47 100644 --- a/trunk/block/cfq-iosched.c +++ b/trunk/block/cfq-iosched.c @@ -2101,6 +2101,7 @@ static void choose_service_tree(struct cfq_data *cfqd, struct cfq_group *cfqg) unsigned count; struct cfq_rb_root *st; unsigned group_slice; + enum wl_prio_t original_prio = cfqd->serving_prio; if (!cfqg) { cfqd->serving_prio = IDLE_WORKLOAD; @@ -2119,6 +2120,9 @@ static void choose_service_tree(struct cfq_data *cfqd, struct cfq_group *cfqg) return; } + if (original_prio != cfqd->serving_prio) + goto new_workload; + /* * For RT and BE, we have to choose also the type * (SYNC, SYNC_NOIDLE, ASYNC), and to compute a workload @@ -2133,6 +2137,7 @@ static void choose_service_tree(struct cfq_data *cfqd, struct cfq_group *cfqg) if (count && !time_after(jiffies, cfqd->workload_expires)) return; +new_workload: /* otherwise select new workload type */ cfqd->serving_type = cfq_choose_wl(cfqd, cfqg, cfqd->serving_prio);