Skip to content
  • Tejun Heo's avatar
    cfq-iosched: charge async IOs to the appropriate blkcg's instead of the root · 60a83707
    Tejun Heo authored
    
    
    Up until now, all async IOs were queued to async queues which are
    shared across the whole request_queue, which means that blkcg resource
    control is completely void on async IOs including all writeback IOs.
    It was done this way because writeback didn't support writeback and
    there was no way of telling which writeback IO belonged to which
    cgroup; however, writeback recently became cgroup aware and writeback
    bio's are sent down properly tagged with the blkcg's to charge them
    against.
    
    This patch makes async cfq_queues per-cfq_cgroup instead of
    per-cfq_data so that each async IO is charged to the blkcg that it was
    tagged for instead of unconditionally attributing it to root.
    
    * cfq_data->async_cfqq and ->async_idle_cfqq are moved to cfq_group
      and alloc / destroy paths are updated accordingly.
    
    * cfq_link_cfqq_cfqg() no longer overrides @cfqg to root for async
      queues.
    
    * check_blkcg_changed() now also invalidates async queues as they no
      longer stay the same across cgroups.
    
    After this patch, cfq's proportional IO control through blkio.weight
    works correctly when cgroup writeback is in use.
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reviewed-by: default avatarJeff Moyer <jmoyer@redhat.com>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Cc: Arianna Avanzini <avanzini.arianna@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    60a83707