mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
rxrpc: Save last ACK's SACK table rather than marking txbufs
Improve the tracking of which packets need to be transmitted by saving the last ACK packet that we receive that has a populated soft-ACK table rather than marking packets. Then we can step through the soft-ACK table and look at the packets we've transmitted beyond that to determine which packets we might want to retransmit. We also look at the highest serial number that has been acked to try and guess which packets we've transmitted the peer is likely to have seen. If necessary, we send a ping to retrieve that number. One downside that might be a problem is that we can't then compare the previous acked/unacked state so easily in rxrpc_input_soft_acks() - which is a potential problem for the slow-start algorithm. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org
This commit is contained in:
@@ -162,6 +162,7 @@ struct rxrpc_call *rxrpc_alloc_call(struct rxrpc_sock *rx, gfp_t gfp,
|
||||
spin_lock_init(&call->notify_lock);
|
||||
spin_lock_init(&call->tx_lock);
|
||||
spin_lock_init(&call->input_lock);
|
||||
spin_lock_init(&call->acks_ack_lock);
|
||||
rwlock_init(&call->state_lock);
|
||||
refcount_set(&call->ref, 1);
|
||||
call->debug_id = debug_id;
|
||||
@@ -701,6 +702,7 @@ void rxrpc_cleanup_call(struct rxrpc_call *call)
|
||||
rxrpc_put_txbuf(txb, rxrpc_txbuf_put_cleaned);
|
||||
}
|
||||
rxrpc_put_txbuf(call->tx_pending, rxrpc_txbuf_put_cleaned);
|
||||
rxrpc_free_skb(call->acks_soft_tbl, rxrpc_skb_cleaned);
|
||||
|
||||
call_rcu(&call->rcu, rxrpc_rcu_destroy_call);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user