|
@@ -3656,7 +3656,7 @@ static void cfq_exit_queue(struct elevator_queue *e)
|
|
|
kfree(cfqd);
|
|
|
}
|
|
|
|
|
|
-static void *cfq_init_queue(struct request_queue *q)
|
|
|
+static int cfq_init_queue(struct request_queue *q)
|
|
|
{
|
|
|
struct cfq_data *cfqd;
|
|
|
int i, j;
|
|
@@ -3665,7 +3665,7 @@ static void *cfq_init_queue(struct request_queue *q)
|
|
|
|
|
|
cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
|
|
|
if (!cfqd)
|
|
|
- return NULL;
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
/* Init root service tree */
|
|
|
cfqd->grp_service_tree = CFQ_RB_ROOT;
|
|
@@ -3692,7 +3692,7 @@ static void *cfq_init_queue(struct request_queue *q)
|
|
|
if (blkio_alloc_blkg_stats(&cfqg->blkg)) {
|
|
|
kfree(cfqg);
|
|
|
kfree(cfqd);
|
|
|
- return NULL;
|
|
|
+ return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
rcu_read_lock();
|
|
@@ -3723,6 +3723,7 @@ static void *cfq_init_queue(struct request_queue *q)
|
|
|
cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, &cfqd->root_group);
|
|
|
|
|
|
cfqd->queue = q;
|
|
|
+ q->elevator->elevator_data = cfqd;
|
|
|
|
|
|
init_timer(&cfqd->idle_slice_timer);
|
|
|
cfqd->idle_slice_timer.function = cfq_idle_slice_timer;
|
|
@@ -3747,7 +3748,7 @@ static void *cfq_init_queue(struct request_queue *q)
|
|
|
* second, in order to have larger depth for async operations.
|
|
|
*/
|
|
|
cfqd->last_delayed_sync = jiffies - HZ;
|
|
|
- return cfqd;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/*
|