cfq-iosched: get rid of cfqq hash
authorVasily Tarasov <vtaras@openvz.org>
Wed, 25 Apr 2007 10:29:51 +0000 (12:29 +0200)
committerJens Axboe <axboe@nelson.home.kernel.dk>
Mon, 30 Apr 2007 07:01:23 +0000 (09:01 +0200)
commit91fac317a34859986a2359a5a5c0e37dc17a9c3d
tree353b8e5d3415e6244b8d2de67020bbbc94f2032c
parentcc19747977824ece6aa1c56a29e974fef5ec2b32
cfq-iosched: get rid of cfqq hash

cfq hash is no more necessary.  We always can get cfqq from io context.
cfq_get_io_context_noalloc() function is introduced, because we don't
want to allocate cic on merging and checking may_queue.  In order to
identify sync queue we've used hash key = CFQ_KEY_ASYNC. Since hash is
eliminated we need to use other criterion: sync flag for queue is added.
In all places where we dig in rb_tree we're in current context, so no
additional locking is required.

Advantages of this patch: no additional memory for hash, no seeking in
hash, code is cleaner. But it is necessary now to seek cic in per-ioc
rbtree, but it is faster:
- most processes work only with few devices
- most systems have only few block devices
- it is a rb-tree

Signed-off-by: Vasily Tarasov <vtaras@openvz.org>
Changes by me:

- Merge into CFQ devel branch
- Get rid of cfq_get_io_context_noalloc()
- Fix various bugs with dereferencing cic->cfqq[] with offset other
  than 0 or 1.
- Fix bug in cfqq setup, is_sync condition was reversed.
- Fix bug where only bio_sync() is used, we need to check for a READ too

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/cfq-iosched.c