• T
    cfq: don't use icq_get_changed() · 598971bf
    Tejun Heo 提交于
    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: NTejun Heo <tj@kernel.org>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    598971bf
cfq-iosched.c 95.1 KB