net: sched: avoid writing on noop_qdisc
[ Upstream commit f98ebd47fd0da1717267ce1583a105d8cc29a16a ] While noop_qdisc.gso_skb and noop_qdisc.skb_bad_txq are not used in other places, it seems not correct to overwrite their fields in dev_init_scheduler_queue(). noop_qdisc is essentially a shared and read-only object, even if it is not marked as const because of some implementation detail. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b80939a474
commit
e6c540bf97
@ -577,6 +577,18 @@ struct Qdisc noop_qdisc = {
|
||||
.dev_queue = &noop_netdev_queue,
|
||||
.running = SEQCNT_ZERO(noop_qdisc.running),
|
||||
.busylock = __SPIN_LOCK_UNLOCKED(noop_qdisc.busylock),
|
||||
.gso_skb = {
|
||||
.next = (struct sk_buff *)&noop_qdisc.gso_skb,
|
||||
.prev = (struct sk_buff *)&noop_qdisc.gso_skb,
|
||||
.qlen = 0,
|
||||
.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.gso_skb.lock),
|
||||
},
|
||||
.skb_bad_txq = {
|
||||
.next = (struct sk_buff *)&noop_qdisc.skb_bad_txq,
|
||||
.prev = (struct sk_buff *)&noop_qdisc.skb_bad_txq,
|
||||
.qlen = 0,
|
||||
.lock = __SPIN_LOCK_UNLOCKED(noop_qdisc.skb_bad_txq.lock),
|
||||
},
|
||||
};
|
||||
EXPORT_SYMBOL(noop_qdisc);
|
||||
|
||||
@ -1253,8 +1265,6 @@ static void dev_init_scheduler_queue(struct net_device *dev,
|
||||
|
||||
rcu_assign_pointer(dev_queue->qdisc, qdisc);
|
||||
dev_queue->qdisc_sleeping = qdisc;
|
||||
__skb_queue_head_init(&qdisc->gso_skb);
|
||||
__skb_queue_head_init(&qdisc->skb_bad_txq);
|
||||
}
|
||||
|
||||
void dev_init_scheduler(struct net_device *dev)
|
||||
|
Loading…
x
Reference in New Issue
Block a user