]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - net/rxrpc/ar-skbuff.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[mirror_ubuntu-bionic-kernel.git] / net / rxrpc / ar-skbuff.c
index d73f6fc760118e0407771eface55ec1cd99d306f..4cfab49e329dbba1a2cfa05c1faeff66fd016031 100644 (file)
@@ -36,7 +36,7 @@ static void rxrpc_request_final_ACK(struct rxrpc_call *call)
                rxrpc_get_call(call);
                set_bit(RXRPC_CALL_ACK_FINAL, &call->events);
                if (try_to_del_timer_sync(&call->ack_timer) >= 0)
-                       schedule_work(&call->processor);
+                       rxrpc_queue_call(call);
                break;
 
        case RXRPC_CALL_SERVER_RECV_REQUEST:
@@ -83,9 +83,14 @@ static void rxrpc_hard_ACK_data(struct rxrpc_call *call,
                rxrpc_request_final_ACK(call);
        } else if (atomic_dec_and_test(&call->ackr_not_idle) &&
                   test_and_clear_bit(RXRPC_CALL_TX_SOFT_ACK, &call->flags)) {
+               /* We previously soft-ACK'd some received packets that have now
+                * been consumed, so send a hard-ACK if no more packets are
+                * immediately forthcoming to allow the transmitter to free up
+                * its Tx bufferage.
+                */
                _debug("send Rx idle ACK");
                __rxrpc_propose_ACK(call, RXRPC_ACK_IDLE, sp->hdr.serial,
-                                   true);
+                                   false);
        }
 
        spin_unlock_bh(&call->lock);
@@ -116,3 +121,17 @@ void rxrpc_packet_destructor(struct sk_buff *skb)
                sock_rfree(skb);
        _leave("");
 }
+
+/**
+ * rxrpc_kernel_free_skb - Free an RxRPC socket buffer
+ * @skb: The socket buffer to be freed
+ *
+ * Let RxRPC free its own socket buffer, permitting it to maintain debug
+ * accounting.
+ */
+void rxrpc_kernel_free_skb(struct sk_buff *skb)
+{
+       rxrpc_free_skb(skb);
+}
+
+EXPORT_SYMBOL(rxrpc_kernel_free_skb);