]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
rx: Generate BUSY packets for error call channels
authorAndrew Deason <adeason@sinenomine.net>
Wed, 14 Nov 2012 04:46:34 +0000 (22:46 -0600)
committerPaul Smeddle <paul.smeddle@gmail.com>
Thu, 6 Dec 2012 16:07:41 +0000 (08:07 -0800)
Currently, if a call is error'd out but still active, we won't
generate BUSY packets if another call comes in on the same channel.
This is because we bail out earlier, here, before we get to the BUSY
processing.

The comments suggest that this is for if we enter an error state while
waiting for TQ to clear. So, only do this if our error has changed.

Reviewed-on: http://gerrit.openafs.org/8460
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Reviewed-by: Simon Wilkinson <simonxwilkinson@gmail.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
(cherry-picked from commit a84c6b0ece1fdee4f462c6ce27fa78c2e0d419f4)

Change-Id: I50fda40b3f010f1b9d03f2d3e22ed00381ae0b33
Reviewed-on: http://gerrit.openafs.org/8548
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Paul Smeddle <paul.smeddle@gmail.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
src/rx/rx.c

index d4f3bd346c30936eabf16ef3e04b384942cef169..4ac971678113f1796a4437d1a3f2e22d0af5305a 100644 (file)
@@ -3339,13 +3339,14 @@ rxi_ReceivePacket(struct rx_packet *np, osi_socket socket,
             */
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
             if (call->state == RX_STATE_ACTIVE) {
+               int old_error = call->error;
                 rxi_WaitforTQBusy(call);
                 /*
                  * If we entered error state while waiting,
                  * must call rxi_CallError to permit rxi_ResetCall
                  * to processed when the tqWaiter count hits zero.
                  */
-                if (call->error) {
+                if (call->error && call->error != old_error) {
                     rxi_CallError(call, call->error);
                     MUTEX_EXIT(&call->lock);
                     MUTEX_ENTER(&rx_refcnt_mutex);