mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
net_sched: sch_cbs: implement lockless cbs_dump()
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>
This commit is contained in:
parent
9263650102
commit
8eb54a421a
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user