]> git.baikalelectronics.ru Git - kernel.git/commit
net_sched: add the ability to defer skb freeing
authorEric Dumazet <edumazet@google.com>
Tue, 14 Jun 2016 03:21:50 +0000 (20:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 15 Jun 2016 21:08:34 +0000 (14:08 -0700)
commitac6c683732773efe04fef68da6f135f575c7f19e
tree9c0f004d07c1fe3314b155695a93f2de51a315c6
parent4f74945a364d46d2f073932b0a09a8712ed5ce89
net_sched: add the ability to defer skb freeing

qdisc are changed under RTNL protection and often
while blocking BH and root qdisc spinlock.

When lots of skbs need to be dropped, we free
them under these locks causing TX/RX freezes,
and more generally latency spikes.

This commit adds rtnl_kfree_skbs(), used to queue
skbs for deferred freeing.

Actual freeing happens right after RTNL is released,
with appropriate scheduling points.

rtnl_qdisc_drop() can also be used in place
of disc_drop() when RTNL is held.

qdisc_reset_queue() and __qdisc_reset_queue() get
the new behavior, so standard qdiscs like pfifo, pfifo_fast...
have their ->reset() method automatically handled.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/rtnetlink.h
include/net/sch_generic.h
net/core/rtnetlink.c
net/sched/sch_generic.c