diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-17 12:41:10 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-17 12:41:10 -0800 |
commit | 5e5997849a8eae7a895a88699a1999b637f87303 (patch) | |
tree | 3d5dc81509583183ccd1a262e6e4e17aede834c0 | |
parent | 00b1d444afc2e5c3129b4a9c16b1de03c0fce3f0 (diff) | |
parent | 54b466e44b1c7809144bbd8cd6be3f85877ca46f (diff) |
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
* 'for-linus' of git://git.kernel.dk/linux-block:
cfq-iosched: fix use-after-free of cfqq
-rw-r--r-- | block/cfq-iosched.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index 163263ddd38..ee55019066a 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c @@ -3117,18 +3117,17 @@ cfq_should_preempt(struct cfq_data *cfqd, struct cfq_queue *new_cfqq, */ static void cfq_preempt_queue(struct cfq_data *cfqd, struct cfq_queue *cfqq) { - struct cfq_queue *old_cfqq = cfqd->active_queue; - cfq_log_cfqq(cfqd, cfqq, "preempt"); - cfq_slice_expired(cfqd, 1); /* * workload type is changed, don't save slice, otherwise preempt * doesn't happen */ - if (cfqq_type(old_cfqq) != cfqq_type(cfqq)) + if (cfqq_type(cfqd->active_queue) != cfqq_type(cfqq)) cfqq->cfqg->saved_workload_slice = 0; + cfq_slice_expired(cfqd, 1); + /* * Put the new queue at the front of the of the current list, * so we know that it will be selected next. |