lkml.org 
[lkml]   [2022]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 221/411] bfq: Track whether bfq_group is still online
    Date
    From: Jan Kara <jack@suse.cz>

    commit 09f871868080c33992cd6a9b72a5ca49582578fa upstream.

    Track whether bfq_group is still online. We cannot rely on
    blkcg_gq->online because that gets cleared only after all policies are
    offlined and we need something that gets updated already under
    bfqd->lock when we are cleaning up our bfq_group to be able to guarantee
    that when we see online bfq_group, it will stay online while we are
    holding bfqd->lock lock.

    CC: stable@vger.kernel.org
    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-7-jack@suse.cz
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    block/bfq-cgroup.c | 3 ++-
    block/bfq-iosched.h | 2 ++
    2 files changed, 4 insertions(+), 1 deletion(-)

    --- a/block/bfq-cgroup.c
    +++ b/block/bfq-cgroup.c
    @@ -536,6 +536,7 @@ static void bfq_pd_init(struct blkg_poli
    */
    bfqg->bfqd = bfqd;
    bfqg->active_entities = 0;
    + bfqg->online = true;
    bfqg->rq_pos_tree = RB_ROOT;
    }

    @@ -582,7 +583,6 @@ struct bfq_group *bfq_find_set_group(str
    struct bfq_entity *entity;

    bfqg = bfq_lookup_bfqg(bfqd, blkcg);
    -
    if (unlikely(!bfqg))
    return NULL;

    @@ -944,6 +944,7 @@ static void bfq_pd_offline(struct blkg_p

    put_async_queues:
    bfq_put_async_queues(bfqd, bfqg);
    + bfqg->online = false;

    spin_unlock_irqrestore(&bfqd->lock, flags);
    /*
    --- a/block/bfq-iosched.h
    +++ b/block/bfq-iosched.h
    @@ -896,6 +896,8 @@ struct bfq_group {

    /* reference counter (see comments in bfq_bic_update_cgroup) */
    int ref;
    + /* Is bfq_group still online? */
    + bool online;

    struct bfq_entity entity;
    struct bfq_sched_data sched_data;

    \
     
     \ /
      Last update: 2022-06-13 13:28    [W:4.174 / U:0.164 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site