cfq: don't use icq_get_changed()
commit598971bfbdfdc8701337dc1636c7919c44699914
authorTejun Heo <tj@kernel.org>
Mon, 19 Mar 2012 22:10:58 +0000 (19 15:10 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 20 Mar 2012 11:47:47 +0000 (20 12:47 +0100)
tree3de33d5059ce3a0cf77a9735804335f9264b7c08
parentabede6da27d9bd62ea9512830c83e32b3ee1104c
cfq: don't use icq_get_changed()

cfq caches the associated cfqq's for a given cic.  The cache needs to
be flushed if the cic's ioprio or blkcg has changed.  It is currently
done by requiring the changing action to set the respective
ICQ_*_CHANGED bit in the icq and testing it from cfq_set_request(),
which involves iterating through all the affected icqs.

All cfq wants to know is whether ioprio and/or blkcg have changed
since the last flush and can be easily achieved by just remembering
the current ioprio and blkcg ID in cic.

This patch adds cic->{ioprio|blkcg_id}, updates all ioprio users to
use the remembered value instead, and updates cfq_set_request() path
such that, instead of using icq_get_changed(), the current values are
compared against the remembered ones and trigger appropriate flush
action if not.  Condition tests are moved inside both _changed
functions which are now named check_ioprio_changed() and
check_blkcg_changed().

ioprio.h::task_ioprio*() can't be used anymore and replaced with
open-coded IOPRIO_CLASS_NONE case in cfq_async_queue_prio().

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/cfq-iosched.c
include/linux/ioprio.h