aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhaolei <zhaolei@cn.fujitsu.com>2008-11-14 09:44:33 +0100
committerJens Axboe <jens.axboe@oracle.com>2008-11-18 15:08:56 +0100
commit68aee07f9bad2c830a898cf6d6bfc11ea24efc40 (patch)
treeb0d2e14a19c16ab3022ec94641828df71b560c06
parent561ec68e4de7947167937c49c451728e6b19e63b (diff)
Release old elevator on change elevator
We should release old elevator when change to use a new one. Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r--drivers/block/xen-blkfront.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index b220c686089..2d19f0cc47f 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -338,12 +338,18 @@ wait:
static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size)
{
struct request_queue *rq;
+ elevator_t *old_e;
rq = blk_init_queue(do_blkif_request, &blkif_io_lock);
if (rq == NULL)
return -1;
- elevator_init(rq, "noop");
+ old_e = rq->elevator;
+ if (IS_ERR_VALUE(elevator_init(rq, "noop")))
+ printk(KERN_WARNING
+ "blkfront: Switch elevator failed, use default\n");
+ else
+ elevator_exit(old_e);
/* Hard sector size and max sectors impersonate the equiv. hardware. */
blk_queue_hardsect_size(rq, sector_size);