mirror of https://gitee.com/openkylin/linux.git
net: sched: avoid writing on noop_qdisc
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>
This commit is contained in:
parent
d8a66aa254
commit
f98ebd47fd
|
@ -572,6 +572,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);
|
||||
|
||||
|
@ -1273,8 +1285,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…
Reference in New Issue