]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
net_sched: sch_cbs: implement lockless cbs_dump()
authorEric Dumazet <edumazet@google.com>
Thu, 18 Apr 2024 07:32:37 +0000 (07:32 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Apr 2024 10:34:07 +0000 (11:34 +0100)
Instead of relying on RTNL, cbs_dump() can use READ_ONCE()
annotations, paired with WRITE_ONCE() ones in cbs_change().

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_cbs.c

index 69001eff0315584df23a24f81ae3b4cf7bf5fd79..939425da18955bc8a3f3d2d5b852b2585e9bcaee 100644 (file)
@@ -389,11 +389,11 @@ static int cbs_change(struct Qdisc *sch, struct nlattr *opt,
        }
 
        /* Everything went OK, save the parameters used. */
-       q->hicredit = qopt->hicredit;
-       q->locredit = qopt->locredit;
-       q->idleslope = qopt->idleslope * BYTES_PER_KBIT;
-       q->sendslope = qopt->sendslope * BYTES_PER_KBIT;
-       q->offload = qopt->offload;
+       WRITE_ONCE(q->hicredit, qopt->hicredit);
+       WRITE_ONCE(q->locredit, qopt->locredit);
+       WRITE_ONCE(q->idleslope, qopt->idleslope * BYTES_PER_KBIT);
+       WRITE_ONCE(q->sendslope, qopt->sendslope * BYTES_PER_KBIT);
+       WRITE_ONCE(q->offload, qopt->offload);
 
        return 0;
 }
@@ -459,11 +459,11 @@ static int cbs_dump(struct Qdisc *sch, struct sk_buff *skb)
        if (!nest)
                goto nla_put_failure;
 
-       opt.hicredit = q->hicredit;
-       opt.locredit = q->locredit;
-       opt.sendslope = div64_s64(q->sendslope, BYTES_PER_KBIT);
-       opt.idleslope = div64_s64(q->idleslope, BYTES_PER_KBIT);
-       opt.offload = q->offload;
+       opt.hicredit = READ_ONCE(q->hicredit);
+       opt.locredit = READ_ONCE(q->locredit);
+       opt.sendslope = div64_s64(READ_ONCE(q->sendslope), BYTES_PER_KBIT);
+       opt.idleslope = div64_s64(READ_ONCE(q->idleslope), BYTES_PER_KBIT);
+       opt.offload = READ_ONCE(q->offload);
 
        if (nla_put(skb, TCA_CBS_PARMS, sizeof(opt), &opt))
                goto nla_put_failure;