rx: Refactor transmit queue wakeup
authorSimon Wilkinson <sxw@your-file-system.com>
Mon, 25 Oct 2010 08:52:10 +0000 (09:52 +0100)
committerDerrick Brashear <shadow@dementia.org>
Tue, 26 Oct 2010 15:10:47 +0000 (08:10 -0700)
Refactor all of the places where we wake up the transmit queue into
a common helper function.

Change-Id: I1a2ca2bf1e6268dcaf90961a8a88bd4165519503
Reviewed-on: http://gerrit.openafs.org/3136
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/rx/rx.c

index 27c1fda..28a7df1 100644 (file)
@@ -1204,6 +1204,21 @@ rxi_WaitforTQBusy(struct rx_call *call) {
 }
 #endif
 
+static void
+rxi_WakeUpTransmitQueue(struct rx_call *call)
+{
+    if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
+       dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n",
+            call, call->tqWaiters, call->flags));
+#ifdef RX_ENABLE_LOCKS
+       osirx_AssertMine(&call->lock, "rxi_Start start");
+       CV_BROADCAST(&call->cv_tq);
+#else /* RX_ENABLE_LOCKS */
+       osi_rxWakeup(&call->tq);
+#endif /* RX_ENABLE_LOCKS */
+    }
+}
+
 /* Start a new rx remote procedure call, on the specified connection.
  * If wait is set to 1, wait for a free call channel; otherwise return
  * 0.  Maxtime gives the maximum number of seconds this call may take,
@@ -4734,13 +4749,7 @@ rxi_ClearTransmitQueue(struct rx_call *call, int force)
         call->tqc -=
 #endif /* RXDEBUG_PACKET */
             rxi_FreePackets(0, &call->tq);
-       if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
-#ifdef RX_ENABLE_LOCKS
-           CV_BROADCAST(&call->cv_tq);
-#else /* RX_ENABLE_LOCKS */
-           osi_rxWakeup(&call->tq);
-#endif /* RX_ENABLE_LOCKS */
-       }
+       rxi_WakeUpTransmitQueue(call);
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
        call->flags &= ~RX_CALL_TQ_CLEARME;
     }
@@ -5824,16 +5833,7 @@ rxi_Start(struct rxevent *event,
                 */
                if (call->flags & RX_CALL_FAST_RECOVER_WAIT) {
                    call->flags &= ~RX_CALL_TQ_BUSY;
-                   if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
-                       dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n",
-                             call, call->tqWaiters, call->flags));
-#ifdef RX_ENABLE_LOCKS
-                       osirx_AssertMine(&call->lock, "rxi_Start start");
-                       CV_BROADCAST(&call->cv_tq);
-#else /* RX_ENABLE_LOCKS */
-                       osi_rxWakeup(&call->tq);
-#endif /* RX_ENABLE_LOCKS */
-                   }
+                   rxi_WakeUpTransmitQueue(call);
                    return;
                }
                if (call->error) {
@@ -5844,16 +5844,7 @@ rxi_Start(struct rxevent *event,
                     if (rx_stats_active)
                         rx_atomic_inc(&rx_tq_debug.rxi_start_aborted);
                    call->flags &= ~RX_CALL_TQ_BUSY;
-                   if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
-                       dpf(("call error %d while xmit %p has %d waiters and flags %d\n",
-                             call->error, call, call->tqWaiters, call->flags));
-#ifdef RX_ENABLE_LOCKS
-                       osirx_AssertMine(&call->lock, "rxi_Start middle");
-                       CV_BROADCAST(&call->cv_tq);
-#else /* RX_ENABLE_LOCKS */
-                       osi_rxWakeup(&call->tq);
-#endif /* RX_ENABLE_LOCKS */
-                   }
+                   rxi_WakeUpTransmitQueue(call);
                    rxi_CallError(call, call->error);
                    return;
                }
@@ -5942,16 +5933,7 @@ rxi_Start(struct rxevent *event,
             * protected by the global lock.
             */
            call->flags &= ~RX_CALL_TQ_BUSY;
-           if (call->tqWaiters || (call->flags & RX_CALL_TQ_WAIT)) {
-               dpf(("call %"AFS_PTR_FMT" has %d waiters and flags %d\n",
-                      call, call->tqWaiters, call->flags));
-#ifdef RX_ENABLE_LOCKS
-               osirx_AssertMine(&call->lock, "rxi_Start end");
-               CV_BROADCAST(&call->cv_tq);
-#else /* RX_ENABLE_LOCKS */
-               osi_rxWakeup(&call->tq);
-#endif /* RX_ENABLE_LOCKS */
-           }
+           rxi_WakeUpTransmitQueue(call);
        } else {
            call->flags |= RX_CALL_NEED_START;
        }