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>
Tue, 8 Feb 2011 14:54:54 +0000 (06:54 -0800)
commit23d6287f7f494383891a497038e8c0e870e824bf
treee63e30f0be01933d98e5da23abda8b1458ece29a
parentfb1bc201648969e29571252e210aba370b9e5c86
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

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>
(cherry picked from commit 54fb96d2b6517ae491fd7a7c03246850d29156d5)

Change-Id: I098c482a6a5b9f34907e9f8f40913df40c5b5d4b
Reviewed-on: http://gerrit.openafs.org/3763
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/rx/rx.c
src/rx/rx.h