if BLOCK

menu "IO Schedulers"

config IOSCHED_NOOP
	bool
	default y
	---help---
	  The no-op I/O scheduler is a minimal scheduler that does basic merging
	  and sorting. Its main uses include non-disk based block devices like
	  memory devices, and specialised software or hardware environments
	  that do their own scheduling and require only minimal assistance from
	  the kernel.

config IOSCHED_TEST
	tristate "Test I/O scheduler"
	depends on DEBUG_FS
	default m
	---help---
	  The test I/O scheduler is a duplicate of the noop scheduler with
	  addition of test utlity.
	  It allows testing a block device by dispatching specific requests
	  according to the test case and declare PASS/FAIL according to the
	  requests completion error code.

config IOSCHED_DEADLINE
	tristate "Deadline I/O scheduler"
	default y
	---help---
	  The deadline I/O scheduler is simple and compact. It will provide
	  CSCAN service with FIFO expiration of requests, switching to
	  a new point in the service tree and doing a batch of IO from there
	  in case of expiry.

config IOSCHED_ROW
	tristate "ROW I/O scheduler"
	default y
	---help---
	  The ROW I/O scheduler gives priority to READ requests over the
	  WRITE requests when dispatching, without starving WRITE requests.
	  Requests are kept in priority queues. Dispatching is done in a RR
	  manner when the dispatch quantum for each queue is calculated
	  according to queue priority.
	  Most suitable for mobile devices.

config IOSCHED_CFQ
	tristate "CFQ I/O scheduler"
	# If BLK_CGROUP is a module, CFQ has to be built as module.
	depends on (BLK_CGROUP=m && m) || !BLK_CGROUP || BLK_CGROUP=y
	default y
	---help---
	  The CFQ I/O scheduler tries to distribute bandwidth equally
	  among all processes in the system. It should provide a fair
	  and low latency working environment, suitable for both desktop
	  and server systems.

	  This is the default I/O scheduler.

	  Note: If BLK_CGROUP=m, then CFQ can be built only as module.

config CFQ_GROUP_IOSCHED
	bool "CFQ Group Scheduling support"
	depends on IOSCHED_CFQ && BLK_CGROUP
	default n
	---help---
	  Enable group IO scheduling in CFQ.

config IOSCHED_BFQ
	tristate "BFQ I/O scheduler"
	depends on EXPERIMENTAL
	default n
	---help---
	  The BFQ I/O scheduler tries to distribute bandwidth among
	  all processes according to their weights.
	  It aims at distributing the bandwidth as desired, independently of
	  the disk parameters and with any workload. It also tries to
	  guarantee low latency to interactive and soft real-time
	  applications. If compiled built-in (saying Y here), BFQ can
	  be configured to support hierarchical scheduling.

config CGROUP_BFQIO
	bool "BFQ hierarchical scheduling support"
	depends on CGROUPS && IOSCHED_BFQ=y
	default n
	---help---
	  Enable hierarchical scheduling in BFQ, using the cgroups
	  filesystem interface.  The name of the subsystem will be
	  bfqio.

choice
	prompt "Default I/O scheduler"
	default DEFAULT_CFQ
	help
	  Select the I/O scheduler which will be used by default for all
	  block devices.

	config DEFAULT_DEADLINE
		bool "Deadline" if IOSCHED_DEADLINE=y

	config DEFAULT_ROW
		bool "ROW" if IOSCHED_ROW=y
		help
		  The ROW I/O scheduler gives priority to READ requests
		  over the WRITE requests when dispatching, without starving
		  WRITE requests. Requests are kept in priority queues.
		  Dispatching is done in a RR manner when the dispatch quantum
		  for each queue is defined according to queue priority.
		  Most suitable for mobile devices.

	config DEFAULT_CFQ
		bool "CFQ" if IOSCHED_CFQ=y

	config DEFAULT_BFQ
		bool "BFQ" if IOSCHED_BFQ=y
		help
		  Selects BFQ as the default I/O scheduler which will be
		  used by default for all block devices.
		  The BFQ I/O scheduler aims at distributing the bandwidth
		  as desired, independently of the disk parameters and with
		  any workload. It also tries to guarantee low latency to
		  interactive and soft real-time applications.

	config DEFAULT_NOOP
		bool "No-op"

endchoice

config DEFAULT_IOSCHED
	string
	default "deadline" if DEFAULT_DEADLINE
	default "row" if DEFAULT_ROW
	default "cfq" if DEFAULT_CFQ
	default "bfq" if DEFAULT_BFQ
	default "noop" if DEFAULT_NOOP

endmenu

endif
