]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
RX: Avoid timing out non-kernel busy channels
authorAndrew Deason <adeason@sinenomine.net>
Mon, 7 Mar 2011 17:08:26 +0000 (11:08 -0600)
committerDerrick Brashear <shadow@dementix.org>
Tue, 24 Jan 2012 02:49:34 +0000 (18:49 -0800)
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>
src/afs/afs_call.c
src/afs/afs_pag_call.c

index 83dfd37a73643b19b178e225274216274400dd08..561ad6f7aad77fa5086ccb92d1f40871ee199855 100644 (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 */
index a0bf0964216d4e72973a3f5e46283a1f5dadd495..d61a91c7ef93116421caa7c23da60f6168cffaab 100644 (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);