• Tejun Heo's avatar
    block, cfq: move ioc ioprio/cgroup changed handling to cic · dc86900e
    Tejun Heo authored
    ioprio/cgroup change was handled by marking the changed state in ioc
    and, on the following access to the ioc, performing RCU-protected
    iteration through all cic's grabbing the matching queue_lock.
    This patch moves the changed state to each cic.  When ioprio or cgroup
    changes, the respective bit is set on all cic's of the ioc and when
    each of those cic (not ioc) is accessed, change is applied for that
    specific ioc-queue pair.
    This also fixes the following two race conditions between setting and
    clearing of changed states.
    * Missing barrier between assign/load of ioprio and ioprio_changed
      allowed applying old ioprio.
    * Change requests could happen between application of change and
      clearing of changed variables.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>