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>

authored by Zhaolei and committed by Jens Axboe 68aee07f 561ec68e

+7 -1
+7 -1
drivers/block/xen-blkfront.c
··· 338 static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size) 339 { 340 struct request_queue *rq; 341 342 rq = blk_init_queue(do_blkif_request, &blkif_io_lock); 343 if (rq == NULL) 344 return -1; 345 346 - elevator_init(rq, "noop"); 347 348 /* Hard sector size and max sectors impersonate the equiv. hardware. */ 349 blk_queue_hardsect_size(rq, sector_size);
··· 338 static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size) 339 { 340 struct request_queue *rq; 341 + elevator_t *old_e; 342 343 rq = blk_init_queue(do_blkif_request, &blkif_io_lock); 344 if (rq == NULL) 345 return -1; 346 347 + old_e = rq->elevator; 348 + if (IS_ERR_VALUE(elevator_init(rq, "noop"))) 349 + printk(KERN_WARNING 350 + "blkfront: Switch elevator failed, use default\n"); 351 + else 352 + elevator_exit(old_e); 353 354 /* Hard sector size and max sectors impersonate the equiv. hardware. */ 355 blk_queue_hardsect_size(rq, sector_size);