rxrpc: Abstract out the calculation of whether there's Tx space
[ Upstream commit 158fe6665389964a1de212818b4a5c52b7f7aff4 ] Abstract out the calculation of there being sufficient Tx buffer space. This is reproduced several times in the rxrpc sendmsg code. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
96860db5c0
commit
f8da7f4428
@ -17,6 +17,21 @@
|
||||
#include <net/af_rxrpc.h>
|
||||
#include "ar-internal.h"
|
||||
|
||||
/*
|
||||
* Return true if there's sufficient Tx queue space.
|
||||
*/
|
||||
static bool rxrpc_check_tx_space(struct rxrpc_call *call, rxrpc_seq_t *_tx_win)
|
||||
{
|
||||
unsigned int win_size =
|
||||
min_t(unsigned int, call->tx_winsize,
|
||||
call->cong_cwnd + call->cong_extra);
|
||||
rxrpc_seq_t tx_win = READ_ONCE(call->tx_hard_ack);
|
||||
|
||||
if (_tx_win)
|
||||
*_tx_win = tx_win;
|
||||
return call->tx_top - tx_win < win_size;
|
||||
}
|
||||
|
||||
/*
|
||||
* Wait for space to appear in the Tx queue or a signal to occur.
|
||||
*/
|
||||
@ -26,9 +41,7 @@ static int rxrpc_wait_for_tx_window_intr(struct rxrpc_sock *rx,
|
||||
{
|
||||
for (;;) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
if (call->tx_top - call->tx_hard_ack <
|
||||
min_t(unsigned int, call->tx_winsize,
|
||||
call->cong_cwnd + call->cong_extra))
|
||||
if (rxrpc_check_tx_space(call, NULL))
|
||||
return 0;
|
||||
|
||||
if (call->state >= RXRPC_CALL_COMPLETE)
|
||||
@ -68,9 +81,7 @@ static int rxrpc_wait_for_tx_window_nonintr(struct rxrpc_sock *rx,
|
||||
set_current_state(TASK_UNINTERRUPTIBLE);
|
||||
|
||||
tx_win = READ_ONCE(call->tx_hard_ack);
|
||||
if (call->tx_top - tx_win <
|
||||
min_t(unsigned int, call->tx_winsize,
|
||||
call->cong_cwnd + call->cong_extra))
|
||||
if (rxrpc_check_tx_space(call, &tx_win))
|
||||
return 0;
|
||||
|
||||
if (call->state >= RXRPC_CALL_COMPLETE)
|
||||
@ -302,9 +313,7 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
|
||||
|
||||
_debug("alloc");
|
||||
|
||||
if (call->tx_top - call->tx_hard_ack >=
|
||||
min_t(unsigned int, call->tx_winsize,
|
||||
call->cong_cwnd + call->cong_extra)) {
|
||||
if (!rxrpc_check_tx_space(call, NULL)) {
|
||||
ret = -EAGAIN;
|
||||
if (msg->msg_flags & MSG_DONTWAIT)
|
||||
goto maybe_error;
|
||||
|
Loading…
x
Reference in New Issue
Block a user