lkml.org 
[lkml]   [2022]   [Sep]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 13/80] net: sched: tbf: dont call qdisc_put() while holding tree lock
    Date
    From: Zhengchao Shao <shaozhengchao@huawei.com>

    [ Upstream commit b05972f01e7d30419987a1f221b5593668fd6448 ]

    The issue is the same to commit c2999f7fb05b ("net: sched: multiq: don't
    call qdisc_put() while holding tree lock"). Qdiscs call qdisc_put() while
    holding sch tree spinlock, which results sleeping-while-atomic BUG.

    Fixes: c266f64dbfa2 ("net: sched: protect block state with mutex")
    Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
    Link: https://lore.kernel.org/r/20220826013930.340121-1-shaozhengchao@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/sched/sch_tbf.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
    index 78e79029dc631..6eb17004a9e44 100644
    --- a/net/sched/sch_tbf.c
    +++ b/net/sched/sch_tbf.c
    @@ -342,6 +342,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt,
    struct nlattr *tb[TCA_TBF_MAX + 1];
    struct tc_tbf_qopt *qopt;
    struct Qdisc *child = NULL;
    + struct Qdisc *old = NULL;
    struct psched_ratecfg rate;
    struct psched_ratecfg peak;
    u64 max_size;
    @@ -433,7 +434,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt,
    sch_tree_lock(sch);
    if (child) {
    qdisc_tree_flush_backlog(q->qdisc);
    - qdisc_put(q->qdisc);
    + old = q->qdisc;
    q->qdisc = child;
    }
    q->limit = qopt->limit;
    @@ -453,6 +454,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt,
    memcpy(&q->peak, &peak, sizeof(struct psched_ratecfg));

    sch_tree_unlock(sch);
    + qdisc_put(old);
    err = 0;

    tbf_offload_change(sch);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-09-06 15:32    [W:4.068 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site