]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-recvackpkt-count-acks-and-open-cong-window-20060612
authorChas Williams <chas@cmf.nrl.navy.mil>
Mon, 12 Jun 2006 05:25:24 +0000 (05:25 +0000)
committerDerrick Brashear <shadow@dementia.org>
Mon, 12 Jun 2006 05:25:24 +0000 (05:25 +0000)
"the non AFS_GLOBAL_RXLOCK_KERNEL version of
rxi_ReceiveAckPacket() wasnt counting 'hard' acks and not opening the
congestion window.  using rx_Readv() directs the incoming packets into
the target iov, and sends a hard ack (skipping soft acks).  "

(cherry picked from commit b365b06d34a9450dc53ad22e8ecb3f6d922af5f4)

src/rx/rx.c

index 2d79a1911476885339e64727fbbe4a6edf681bac..55e3dc40a2a201f388a8bf80f4723808d16ca76c 100644 (file)
@@ -3550,6 +3550,9 @@ rxi_ReceiveAckPacket(register struct rx_call *call, struct rx_packet *np,
        if (serial
            && (tp->header.serial == serial || tp->firstSerial == serial))
            rxi_ComputePeerNetStats(call, tp, ap, np);
+       if (!(tp->flags & RX_PKTFLAG_ACKED)) {
+           newAckCount++;
+       }
 #ifdef AFS_GLOBAL_RXLOCK_KERNEL
        /* XXX Hack. Because we have to release the global rx lock when sending
         * packets (osi_NetSend) we drop all acks while we're traversing the tq
@@ -3560,9 +3563,6 @@ rxi_ReceiveAckPacket(register struct rx_call *call, struct rx_packet *np,
         * set the ack bits in the packets and have rxi_Start remove the packets
         * when it's done transmitting.
         */
-       if (!(tp->flags & RX_PKTFLAG_ACKED)) {
-           newAckCount++;
-       }
        if (call->flags & RX_CALL_TQ_BUSY) {
 #ifdef RX_ENABLE_LOCKS
            tp->flags |= RX_PKTFLAG_ACKED;