RX: Avoid retrying calls on busy channels
authorAndrew Deason <adeason@sinenomine.net>
Thu, 2 Dec 2010 23:13:17 +0000 (17:13 -0600)
committerDerrick Brashear <shadow@dementia.org>
Thu, 27 Jan 2011 15:59:48 +0000 (07:59 -0800)
commit54fb96d2b6517ae491fd7a7c03246850d29156d5
tree50bfae9d7f92ed85bdc8bb48aaf9de4dec08a771
parent29ef47dfab86f7b226e0518b1365c27a8eb5126f
RX: Avoid retrying calls on busy channels

When we receive an RX_PACKET_TYPE_BUSY packet, we currently ignore it.
This is a problem when the server has a long-running call on that same
call channel that we don't know about, since we will then keep
retrying the call on the same channel and keep getting
RX_PACKET_TYPE_BUSY responses.

Try to avoid this by returning the RX_CALL_TIMEOUT error when we get a
BUSY packet and there are other free call channels available on the
conn. When the application gets the error and retries the call, we
avoid using the same call channel again where possible. When all of
the call channels appear busy, we revert to effectively the old
behavior of retrying the call on the same channel until we get an
RX_CALL_DEAD (or similar) error.

FIXES 128671

Change-Id: I29b84aa36dcc856528c30d26811e5d6c4b78a1ca
Reviewed-on: http://gerrit.openafs.org/3431
Tested-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/rx/rx.c
src/rx/rx.h