[DCCP]: Set TX Queue Length Bounds via Sysctl
Previously the transmit queue was unbounded. This patch: * puts a limit on transmit queue length and sends back EAGAIN if the buffer is full * sets the TX queue length to a sensible default * implements tx buffer sysctls for DCCP Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz> Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
Родитель
56724aa434
Коммит
b1308dc015
|
@ -87,6 +87,7 @@ extern int sysctl_dccp_feat_tx_ccid;
|
|||
extern int sysctl_dccp_feat_ack_ratio;
|
||||
extern int sysctl_dccp_feat_send_ack_vector;
|
||||
extern int sysctl_dccp_feat_send_ndp_count;
|
||||
extern int sysctl_dccp_tx_qlen;
|
||||
|
||||
/* is seq1 < seq2 ? */
|
||||
static inline int before48(const u64 seq1, const u64 seq2)
|
||||
|
|
|
@ -52,6 +52,9 @@ struct inet_hashinfo __cacheline_aligned dccp_hashinfo = {
|
|||
|
||||
EXPORT_SYMBOL_GPL(dccp_hashinfo);
|
||||
|
||||
/* the maximum queue length for tx in packets. 0 is no limit */
|
||||
int sysctl_dccp_tx_qlen __read_mostly = 5;
|
||||
|
||||
void dccp_set_state(struct sock *sk, const int state)
|
||||
{
|
||||
const int oldstate = sk->sk_state;
|
||||
|
@ -645,6 +648,13 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
|||
return -EMSGSIZE;
|
||||
|
||||
lock_sock(sk);
|
||||
|
||||
if (sysctl_dccp_tx_qlen &&
|
||||
(sk->sk_write_queue.qlen >= sysctl_dccp_tx_qlen)) {
|
||||
rc = -EAGAIN;
|
||||
goto out_release;
|
||||
}
|
||||
|
||||
timeo = sock_sndtimeo(sk, noblock);
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче