etf: Drop all expired packets
authorJesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com>
Thu, 15 Nov 2018 01:26:35 +0000 (17:26 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Nov 2018 04:39:34 +0000 (20:39 -0800)
commit37342bdaf5b363cf2e1bd170ce7d1de34ecf57e7
tree8a6d5deb476ca3c1a6f53cec4b0a76f43ec4b6e2
parentcbeeb8efec821188c770f582be345ed7b04a0b60
etf: Drop all expired packets

Currently on dequeue() ETF only drops the first expired packet, which
causes a problem if the next packet is already expired. When this
happens, the watchdog will be configured with a time in the past, fire
straight way and the packet will finally be dropped once the dequeue()
function of the qdisc is called again.

We can save quite a few cycles and improve the overall behavior of the
qdisc if we drop all expired packets if the next packet is expired.
This should allow ETF to recover faster from bad situations. But
packet drops are still a very serious warning that the requirements
imposed on the system aren't reasonable.

This was inspired by how the implementation of hrtimers use the
rb_tree inside the kernel.

Signed-off-by: Jesus Sanchez-Palencia <jesus.s.palencia@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/sch_etf.c