rx: Process ICMP unreachable errors
authorAndrew Deason <adeason@sinenomine.net>
Thu, 2 Aug 2012 15:58:12 +0000 (11:58 -0400)
committerDerrick Brashear <shadow@dementix.org>
Thu, 9 Aug 2012 15:04:43 +0000 (08:04 -0700)
commit9cd983799e622c9acf5dd6e0b9ae3a3a75eaa8ce
treed2fd303c9f78b8d9df9a64c4b3efa5d9a094e72f
parent407cfd281eab375512881945999b7e13ba93936e
rx: Process ICMP unreachable errors

When a machine receives ICMP errors, we can detect them in
AFS_RXERRQ_ENV environments. Many of these errors indicate that a
machine is not reachable, so we are guaranteed to not get a response
from them. When we get such an error for a particular peer, mark all
relevant calls with an RX_CALL_DEAD error, since we know we won't get
a response from them. This allows some calls to dead/unreachable hosts
to fail much more quickly.

Do not immediately kill new calls, since obviously the host may have
come back up since then (or the routing/firewall/etc was fixed), but
only calls that were started before the current error was received.

Note that a call doesn't actually notice until the next rxi_CheckCall,
since directly killing each of the relevant calls would be rather
slow. So, we don't notice a dead peer immediately, though we notice
much more quickly than we used to.

Reorganize the error queue processing a little bit to make this easier
to do.

Change-Id: I403540e0677fe2d432901e4ecc19f7f385610b7f
Reviewed-on: http://gerrit.openafs.org/7929
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
src/rx/LINUX/rx_knet.c
src/rx/rx.c
src/rx/rx_call.h
src/rx/rx_internal.h
src/rx/rx_peer.h
src/rx/rx_user.c