[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] make blkfront/blktagp2 respect the elevator=xyz command line option
For some workloads, CFQ has better performance than the no-op scheduler that is forced by the blkfront driver. The only way to set a different scheduler is the sysfs interface, because elevator_init is called unconditionally. This patch allows one to use "elevator=cfq" as well. While one could argue that the driver's behavior is expected (after all "elevator=cfq" is the default and should not have any effect), the do-what-I-mean behavior implemented by this patch is more logical. Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> --- block/elevator.c | 3 ++- drivers/xen/blkfront/vbd.c | 11 ++++++----- drivers/xen/blktap2/device.c | 11 ++++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/block/elevator.c b/block/elevator.c --- a/block/elevator.c +++ b/block/elevator.c @@ -132,7 +132,8 @@ eq->elevator_data = data; } -static char chosen_elevator[16]; +char chosen_elevator[16]; +EXPORT_SYMBOL_GPL(chosen_elevator); static int __init elevator_setup(char *str) { diff --git a/drivers/xen/blkfront/vbd.c b/drivers/xen/blkfront/vbd.c --- a/drivers/xen/blkfront/vbd.c +++ b/drivers/xen/blkfront/vbd.c @@ -208,6 +208,8 @@ /* XXX: release major if 0 */ } +extern char chosen_elevator[]; + static int xlvbd_init_blk_queue(struct gendisk *gd, u16 sector_size) { @@ -217,11 +219,10 @@ if (rq == NULL) return -1; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) - elevator_init(rq, "noop"); -#else - elevator_init(rq, &elevator_noop); -#endif + /* Always respect the user's explicitly chosen elevator, but otherwise + pick a different default than CONFIG_DEFAULT_IOSCHED. */ + if (!*chosen_elevator) + elevator_init(rq, "noop"); /* Hard sector size and max sectors impersonate the equiv. hardware. */ blk_queue_hardsect_size(rq, sector_size); diff --git a/drivers/xen/blktap2/device.c b/drivers/xen/blktap2/device.c --- a/drivers/xen/blktap2/device.c +++ b/drivers/xen/blktap2/device.c @@ -1034,6 +1034,8 @@ return 0; } +extern char chosen_elevator[]; + int blktap_device_create(struct blktap *tap) { @@ -1078,11 +1080,10 @@ if (!rq) goto error; -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10) - elevator_init(rq, "noop"); -#else - elevator_init(rq, &elevator_noop); -#endif + /* Always respect the user's explicitly chosen elevator, but otherwise + pick a different default than CONFIG_DEFAULT_IOSCHED. */ + if (!*chosen_elevator) + elevator_init(rq, "noop"); gd->queue = rq; rq->queuedata = dev; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |