RX: Avoid timing out non-kernel busy channels

When we encounter a "busy" call channel (indicated by receiving
RX_PACKET_TYPE_BUSY packets), we can error out a call with
RX_CALL_TIMEOUT to try and get the application code to retry the call.
However, many RX applications are not aware of this, and will just
fail with an error upon receiving a single busy packet.

So instead, make this behavior optional, and only do it if the
application tells us what specific error it expects to receive when a
busy call channel is detected. Enable this behavior for the Unix cache
manager, as it can cope with receiving an RX_CALL_TIMEOUT error in
this scenario.

(cherry picked from commit eddcee3ad518dff9fbfda790640c5bfd2e97ef5a)
Reviewed-on: http://gerrit.openafs.org/4159
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

Change-Id: I3938e79ab009f14f5421a4a45e2a099276c49f24
Reviewed-on: http://gerrit.openafs.org/6611
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
This commit is contained in:
Andrew Deason 2011-03-07 11:08:26 -06:00 committed by Derrick Brashear
parent 05fb252977
commit afce83a967
2 changed files with 3 additions and 0 deletions

View File

@ -115,6 +115,8 @@ afs_InitSetup(int preallocs)
memset(afs_zeros, 0, AFS_ZEROS);
rx_SetBusyChannelError(RX_CALL_TIMEOUT);
/* start RX */
if(!afscall_set_rxpck_received)
rx_extraPackets = AFS_NRXPACKETS; /* smaller # of packets */

View File

@ -98,6 +98,7 @@ afspag_Init(afs_int32 nfs_server_addr)
AFS_GLOCK();
afs_InitStats();
rx_SetBusyChannelError(RX_CALL_TIMEOUT);
rx_Init(htons(7001));
AFS_STATCNT(afs_ResourceInit);