summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivek Goyal <vgoyal@redhat.com>2009-07-09 22:13:16 +0200
committerJens Axboe <axboe@carl.(none)>2009-07-10 20:31:54 +0200
commit32f2e807a3938b24d0831211e6094f9e44b2fc83 (patch)
tree80baac86022bc36bc07a787008642149fa205642
parentecb554a846f8e9d2a58f6d6c118168a63ac065aa (diff)
downloadlinux-3.10-32f2e807a3938b24d0831211e6094f9e44b2fc83.tar.gz
linux-3.10-32f2e807a3938b24d0831211e6094f9e44b2fc83.tar.bz2
linux-3.10-32f2e807a3938b24d0831211e6094f9e44b2fc83.zip
cfq-iosched: reset oom_cfqq in cfq_set_request()
In case memory is scarce, we now default to oom_cfqq. Once memory is available again, we should allocate a new cfqq and stop using oom_cfqq for a particular io context. Once a new request comes in, check if we are using oom_cfqq, and if yes, try to allocate a new cfqq. Tested the patch by forcing the use of oom_cfqq and upon next request thread realized that it was using oom_cfqq and it allocated a new cfqq. Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--block/cfq-iosched.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 87276eb83f7..fd7080ed793 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -2311,7 +2311,7 @@ cfq_set_request(struct request_queue *q, struct request *rq, gfp_t gfp_mask)
goto queue_fail;
cfqq = cic_to_cfqq(cic, is_sync);
- if (!cfqq) {
+ if (!cfqq || cfqq == &cfqd->oom_cfqq) {
cfqq = cfq_get_queue(cfqd, is_sync, cic->ioc, gfp_mask);
cic_set_cfqq(cic, cfqq, is_sync);
}