• Tejun Heo's avatar
    blkcg: Restructure blkg_conf_prep() and friends · faffaab2
    Tejun Heo authored
    We want to support lazy init of rq-qos policies so that iolatency is enabled
    lazily on configuration instead of gendisk initialization. The way blkg
    config helpers are structured now is a bit awkward for that. Let's
    restructure:
    
    * blkcg_conf_open_bdev() is renamed to blkg_conf_open_bdev(). The blkcg_
      prefix was used because the bdev opening step is blkg-independent.
      However, the distinction is too subtle and confuses more than helps. Let's
      switch to blkg prefix so that it's consistent with the type and other
      helper names.
    
    * struct blkg_conf_ctx now remembers the original input string and is always
      initialized by the new blkg_conf_init().
    
    * blkg_conf_open_bdev() is updated to take a pointer to blkg_conf_ctx like
      blkg_conf_prep() and can be called multiple times safely. Instead of
      modifying the double pointer to input string directly,
      blkg_conf_open_bdev() now sets blkg_conf_ctx->body.
    
    * blkg_conf_finish() is renamed to blkg_conf_exit() for symmetry and now
      must be called on all blkg_conf_ctx's which were initialized with
      blkg_conf_init().
    
    Combined, this allows the users to either open the bdev first or do it
    altogether with blkg_conf_prep() which will help implementing lazy init of
    rq-qos policies.
    
    blkg_conf_init/exit() will also be used implement synchronization against
    device removal. This is necessary because iolat / iocost are configured
    through cgroupfs instead of one of the files under /sys/block/DEVICE. As
    cgroupfs operations aren't synchronized with block layer, the lazy init and
    other configuration operations may race against device removal. This patch
    makes blkg_conf_init/exit() used consistently for all cgroup-orginating
    configurations making them a good place to implement explicit
    synchronization.
    
    Users are updated accordingly. No behavior change is intended by this patch.
    
    v2: bfq wasn't updated in v1 causing a build error. Fixed.
    
    v3: Update the description to include future use of blkg_conf_init/exit() as
        synchronization points.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Josef Bacik <josef@toxicpanda.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Yu Kuai <yukuai1@huaweicloud.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20230413000649.115785-3-tj@kernel.orgSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
    faffaab2
blk-iocost.c 97.8 KB