Resetting a queue discipline back to the default pfifo_fast one?

I'm trying to temporarily set a rate-limited queue discipline and then remove it a bit later:

# /sbin/tc qdisc add dev eth1 root tbf rate 600kbit latency 50ms burst 1540
# /sbin/tc qdisc del dev eth1 root

Unfortunately, this entirely removes the queue discipline and prevents outgoing data transfers from working after the queue is deleted.

I was hoping to be able to reset the queue discipline back to the default one:

qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

However it doesn't look like that pfifo_fast qdisc can be created manually:

# /sbin/tc qdisc add dev eth1 root pfifo_fast
qdisc 'pfifo_fast' does not support option parsing

The work-around I found is to create a new simple queue discipline:

# /sbin/tc qdisc add dev eth1 root prio

However, I was wondering how to reset this back to the real default without rebooting.


Solution 1:

to remove and add a new queue discipline:

tc qdisc del dev eth1 root
tc qdisc add dev eth1 root pfifo

or if a queue discipline is already in place you can replace it directly:

tc qdisc replace dev eth1 root pfifo

Solution 2:

from http://www.knowplace.org/pages/howtos/traffic_shaping_with_linux/examples.php:

tc qdisc del dev eth1 root

Solution 3:

The man page for pfifo_fast (man tc-pfifo_fast) says that interfaces automatically have the pfifo_fast qdisc attached - when you then add a different qdisc and then delete this qdisc, pfifo_fast will automatically go back into service.

This suggests something has broken in the OP's setup.

Tested with:

$ uname -a
Linux debian-testing-vm 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x86_64 GNU/Linux