• John Fastabend's avatar
    net: sched: drop qdisc_reset from dev_graft_qdisc · a80de288
    John Fastabend authored
    [ Upstream commit 7bbde83b ]
    In qdisc_graft_qdisc a "new" qdisc is attached and the 'qdisc_destroy'
    operation is called on the old qdisc. The destroy operation will wait
    a rcu grace period and call qdisc_rcu_free(). At which point
    gso_cpu_skb is free'd along with all stats so no need to zero stats
    and gso_cpu_skb from the graft operation itself.
    Further after dropping the qdisc locks we can not continue to call
    qdisc_reset before waiting an rcu grace period so that the qdisc is
    detached from all cpus. By removing the qdisc_reset() here we get
    the correct property of waiting an rcu grace period and letting the
    qdisc_destroy operation clean up the qdisc correctly.
    Note, a refcnt greater than 1 would cause the destroy operation to
    be aborted however if this ever happened the reference to the qdisc
    would be lost and we would have a memory leak.
    Signed-off-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>