From 31ebfb635a2557bd36cef53da77331fcafcd3368 Mon Sep 17 00:00:00 2001 From: Arianna Avanzini Date: Tue, 4 Feb 2014 12:41:30 +0100 Subject: [PATCH] block: Switch from BFQ-v7r3 for 3.10.0 to BFQ-v7r3 for 3.10.8+ Signed-off-by: Paolo Valente Signed-off-by: Arianna Avanzini --- block/bfq-iosched.c | 18 +++++++++++++++--- block/bfq.h | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c index 21f762e..7fd1bd1 100644 --- a/block/bfq-iosched.c +++ b/block/bfq-iosched.c @@ -3437,14 +3437,22 @@ static void bfq_exit_queue(struct elevator_queue *e) kfree(bfqd); } -static int bfq_init_queue(struct request_queue *q) +static int bfq_init_queue(struct request_queue *q, struct elevator_type *e) { struct bfq_group *bfqg; struct bfq_data *bfqd; + struct elevator_queue *eq; + + eq = elevator_alloc(q, e); + if (eq == NULL) + return -ENOMEM; bfqd = kzalloc_node(sizeof(*bfqd), GFP_KERNEL, q->node); - if (bfqd == NULL) + if (bfqd == NULL) { + kobject_put(&eq->kobj); return -ENOMEM; + } + eq->elevator_data = bfqd; /* * Our fallback bfqq if bfq_find_alloc_queue() runs into OOM issues. @@ -3455,11 +3463,15 @@ static int bfq_init_queue(struct request_queue *q) atomic_inc(&bfqd->oom_bfqq.ref); bfqd->queue = q; - q->elevator->elevator_data = bfqd; + + spin_lock_irq(q->queue_lock); + q->elevator = eq; + spin_unlock_irq(q->queue_lock); bfqg = bfq_alloc_root_group(bfqd, q->node); if (bfqg == NULL) { kfree(bfqd); + kobject_put(&eq->kobj); return -ENOMEM; } diff --git a/block/bfq.h b/block/bfq.h index a00b48e..ccf29c9 100644 --- a/block/bfq.h +++ b/block/bfq.h @@ -1,5 +1,5 @@ /* - * BFQ-v7r3 for 3.10.0: data structures and common functions prototypes. + * BFQ-v7r3 for 3.10.8: data structures and common functions prototypes. * * Based on ideas and code from CFQ: * Copyright (C) 2003 Jens Axboe -- 1.9.1