• Tejun Heo's avatar
    blkcg: factor out blkio_group creation · cd1604fa
    Tejun Heo authored
    Currently both blk-throttle and cfq-iosched implement their own
    blkio_group creation code in throtl_get_tg() and cfq_get_cfqg().  This
    patch factors out the common code into blkg_lookup_create(), which
    returns ERR_PTR value so that transitional failures due to queue
    bypass can be distinguished from other failures.
    * New plkio_policy_ops methods blkio_alloc_group_fn() and
      blkio_link_group_fn added.  Both are transitional and will be
      removed once the blkg management code is fully moved into
    * blkio_alloc_group_fn() allocates policy-specific blkg which is
      usually a larger data structure with blkg as the first entry and
      intiailizes it.  Note that initialization of blkg proper, including
      percpu stats, is responsibility of blk-cgroup proper.
      Note that default config (weight, bps...) initialization is done
      from this method; otherwise, we end up violating locking order
      between blkcg and q locks via blkcg_get_CONF() functions.
    * blkio_link_group_fn() is called under queue_lock and responsible for
      linking the blkg to the queue.  blkcg side is handled by blk-cgroup
    * The common blkg creation function is named blkg_lookup_create() and
      blkiocg_lookup_group() is renamed to blkg_lookup() for consistency.
      Also, throtl / cfq related functions are similarly [re]named for
    This simplifies blkcg policy implementations and enables further
    -v2: Vivek noticed that blkg_lookup_create() incorrectly tested
         blk_queue_dead() instead of blk_queue_bypass() leading a user of
         the function ending up creating a new blkg on bypassing queue.
         This is a bug introduced while relocating bypass patches before
         this one.  Fixed.
    -v3: ERR_PTR patch folded into this one.  @for_root added to
         blkg_lookup_create() to allow creating root group on a bypassed
         queue during elevator switch.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>