block: add function call to switch the IO scheduler from a driver
authorJens Axboe <jaxboe@fusionio.com>
Mon, 23 Aug 2010 11:52:19 +0000 (13:52 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Mon, 23 Aug 2010 11:52:19 +0000 (13:52 +0200)
commit5dd531a03ad721b41911ddb32e6e0481404e7aaf
tree3d07d0aa902eb61a575bbc7cc2a57c03431e2b01
parent220eb7fd984bfc7e6b4005fdf32efe9cd8af7cf2
block: add function call to switch the IO scheduler from a driver

Currently drivers must do an elevator_exit() + elevator_init()
to switch IO schedulers. There are a few problems with this:

- Since commit 1abec4fdbb142e3ccb6ce99832fae42129134a96,
  elevator_init() requires a zeroed out q->elevator
  pointer. The two existing in-kernel users don't do that.

- It will only work at initialization time, since using the
  above two-staged construct does not properly quisce the queue.

So add elevator_change() which takes care of this, and convert
the elv_iosched_store() sysfs interface to use this helper as well.

Reported-by: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Reported-by: Kevin Vigor <kevin@vigor.nu>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
block/elevator.c
include/linux/elevator.h