From 43d15eb29e755daa70650c91969ba176300b2099 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 11 Aug 2004 19:27:27 -0700 Subject: [PATCH] [PATCH] setup queue before elevator_init() We must setup the queue before calling elevator_init(), otherwise the elevator cannot use the queue members. This really hurts cfq since it checks ->nr_requests, which is zero at that time. Signed-off-by: Linus Torvalds --- drivers/block/ll_rw_blk.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/block/ll_rw_blk.c b/drivers/block/ll_rw_blk.c index 8dc40d5d86daa..17c403ebd58bb 100644 --- a/drivers/block/ll_rw_blk.c +++ b/drivers/block/ll_rw_blk.c @@ -1467,9 +1467,6 @@ request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) printk("Using %s io scheduler\n", chosen_elevator->elevator_name); } - if (elevator_init(q, chosen_elevator)) - goto out_elv; - q->request_fn = rfn; q->back_merge_fn = ll_back_merge_fn; q->front_merge_fn = ll_front_merge_fn; @@ -1487,8 +1484,12 @@ request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) blk_queue_max_hw_segments(q, MAX_HW_SEGMENTS); blk_queue_max_phys_segments(q, MAX_PHYS_SEGMENTS); - return q; -out_elv: + /* + * all done + */ + if (!elevator_init(q, chosen_elevator)) + return q; + blk_cleanup_queue(q); out_init: kmem_cache_free(requestq_cachep, q); -- 2.53.0