lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 539/667] bfq: Make sure bfqg for which we are queueing requests is online
    Date
    From: Jan Kara <jack@suse.cz>

    commit 075a53b78b815301f8d3dd1ee2cd99554e34f0dd upstream.

    Bios queued into BFQ IO scheduler can be associated with a cgroup that
    was already offlined. This may then cause insertion of this bfq_group
    into a service tree. But this bfq_group will get freed as soon as last
    bio associated with it is completed leading to use after free issues for
    service tree users. Fix the problem by making sure we always operate on
    online bfq_group. If the bfq_group associated with the bio is not
    online, we pick the first online parent.

    CC: stable@vger.kernel.org
    Fixes: e21b7a0b9887 ("block, bfq: add full hierarchical scheduling and cgroups support")
    Tested-by: "yukuai (C)" <yukuai3@huawei.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20220401102752.8599-9-jack@suse.cz
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    block/bfq-cgroup.c | 15 ++++++++++++---
    1 file changed, 12 insertions(+), 3 deletions(-)

    --- a/block/bfq-cgroup.c
    +++ b/block/bfq-cgroup.c
    @@ -610,10 +610,19 @@ static void bfq_link_bfqg(struct bfq_dat
    struct bfq_group *bfq_bio_bfqg(struct bfq_data *bfqd, struct bio *bio)
    {
    struct blkcg_gq *blkg = bio->bi_blkg;
    + struct bfq_group *bfqg;

    - if (!blkg)
    - return bfqd->root_group;
    - return blkg_to_bfqg(blkg);
    + while (blkg) {
    + bfqg = blkg_to_bfqg(blkg);
    + if (bfqg->online) {
    + bio_associate_blkg_from_css(bio, &blkg->blkcg->css);
    + return bfqg;
    + }
    + blkg = blkg->parent;
    + }
    + bio_associate_blkg_from_css(bio,
    + &bfqg_to_blkg(bfqd->root_group)->blkcg->css);
    + return bfqd->root_group;
    }

    /**

    \
     
     \ /
      Last update: 2022-06-07 22:03    [W:4.751 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site