aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo2012-03-05 15:14:57 -0600
committerJens Axboe2012-03-06 14:27:21 -0600
commitb2fab5acd28ead6f0dd6c3996ba23f0ef1772f15 (patch)
treeb0b96984e1a4d9c856edc9ddfc36e427951c5a86 /block/cfq-iosched.c
parent5a5bafdc396b1da7570f84fb96a0f8a288970c5e (diff)
downloadkernel-common-b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15.tar.gz
kernel-common-b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15.tar.xz
kernel-common-b2fab5acd28ead6f0dd6c3996ba23f0ef1772f15.zip
elevator: make elevator_init_fn() return 0/-errno
elevator_ops->elevator_init_fn() has a weird return value. It returns a void * which the caller should assign to q->elevator->elevator_data and %NULL return denotes init failure. Update such that it returns integer 0/-errno and sets elevator_data directly as necessary. This makes the interface more conventional and eases further cleanup. Signed-off-by: Tejun Heo <tj@kernel.org> Cc: Vivek Goyal <vgoyal@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r--block/cfq-iosched.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c
index 388fe01de18..72680a6715f 100644
--- a/block/cfq-iosched.c
+++ b/block/cfq-iosched.c
@@ -3656,7 +3656,7 @@ static void cfq_exit_queue(struct elevator_queue *e)
3656 kfree(cfqd); 3656 kfree(cfqd);
3657} 3657}
3658 3658
3659static void *cfq_init_queue(struct request_queue *q) 3659static int cfq_init_queue(struct request_queue *q)
3660{ 3660{
3661 struct cfq_data *cfqd; 3661 struct cfq_data *cfqd;
3662 int i, j; 3662 int i, j;
@@ -3665,7 +3665,7 @@ static void *cfq_init_queue(struct request_queue *q)
3665 3665
3666 cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node); 3666 cfqd = kmalloc_node(sizeof(*cfqd), GFP_KERNEL | __GFP_ZERO, q->node);
3667 if (!cfqd) 3667 if (!cfqd)
3668 return NULL; 3668 return -ENOMEM;
3669 3669
3670 /* Init root service tree */ 3670 /* Init root service tree */
3671 cfqd->grp_service_tree = CFQ_RB_ROOT; 3671 cfqd->grp_service_tree = CFQ_RB_ROOT;
@@ -3692,7 +3692,7 @@ static void *cfq_init_queue(struct request_queue *q)
3692 if (blkio_alloc_blkg_stats(&cfqg->blkg)) { 3692 if (blkio_alloc_blkg_stats(&cfqg->blkg)) {
3693 kfree(cfqg); 3693 kfree(cfqg);
3694 kfree(cfqd); 3694 kfree(cfqd);
3695 return NULL; 3695 return -ENOMEM;
3696 } 3696 }
3697 3697
3698 rcu_read_lock(); 3698 rcu_read_lock();
@@ -3723,6 +3723,7 @@ static void *cfq_init_queue(struct request_queue *q)
3723 cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, &cfqd->root_group); 3723 cfq_link_cfqq_cfqg(&cfqd->oom_cfqq, &cfqd->root_group);
3724 3724
3725 cfqd->queue = q; 3725 cfqd->queue = q;
3726 q->elevator->elevator_data = cfqd;
3726 3727
3727 init_timer(&cfqd->idle_slice_timer); 3728 init_timer(&cfqd->idle_slice_timer);
3728 cfqd->idle_slice_timer.function = cfq_idle_slice_timer; 3729 cfqd->idle_slice_timer.function = cfq_idle_slice_timer;
@@ -3747,7 +3748,7 @@ static void *cfq_init_queue(struct request_queue *q)
3747 * second, in order to have larger depth for async operations. 3748 * second, in order to have larger depth for async operations.
3748 */ 3749 */
3749 cfqd->last_delayed_sync = jiffies - HZ; 3750 cfqd->last_delayed_sync = jiffies - HZ;
3750 return cfqd; 3751 return 0;
3751} 3752}
3752 3753
3753/* 3754/*