ipv4: disable bh while doing route gc
authorMarcelo Ricardo Leitner <mleitner@redhat.com>
Mon, 13 Oct 2014 17:03:30 +0000 (14:03 -0300)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 5 Nov 2014 20:27:47 +0000 (20:27 +0000)
commit4715883ba814db9635baf74e378580bd27a534bd
treece6c60de0dc780f0fa2edfaa0152ff71e889b6f4
parentad5ca98f54c3b6604a7bb72059973a85deb0b779
ipv4: disable bh while doing route gc

Further tests revealed that after moving the garbage collector to a work
queue and protecting it with a spinlock may leave the system prone to
soft lockups if bottom half gets very busy.

It was reproced with a set of firewall rules that REJECTed packets. If
the NIC bottom half handler ends up running on the same CPU that is
running the garbage collector on a very large cache, the garbage
collector will not be able to do its job due to the amount of work
needed for handling the REJECTs and also won't reschedule.

The fix is to disable bottom half during the garbage collecting, as it
already was in the first place (most calls to it came from softirqs).

Signed-off-by: Marcelo Ricardo Leitner <mleitner@redhat.com>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/ipv4/route.c