2008-11-14 08:38:14

by Zhao Lei

[permalink] [raw]
Subject: [PATCH] Release old elevator on change elevator

We should release old elevator when change to use a new one.

Signed-off-by: Zhao Lei <[email protected]>
---
drivers/block/xen-blkfront.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index b220c68..2d19f0c 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);
--
1.5.5.3


2008-11-14 08:42:34

by Jens Axboe

[permalink] [raw]
Subject: Re: [PATCH] Release old elevator on change elevator

On Fri, Nov 14 2008, Zhaolei wrote:
> We should release old elevator when change to use a new one.
>
> Signed-off-by: Zhao Lei <[email protected]>
> ---
> drivers/block/xen-blkfront.c | 8 +++++++-
> 1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
> index b220c68..2d19f0c 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);
> --
> 1.5.5.3

I thought we'd already switched that to the nonrot flag, but that is
merged up for 2.6.29. So this looks appropriate for 2.6.28, I'll queue
it up.

--
Jens Axboe