diff options
Diffstat (limited to 'net/dccp')
-rw-r--r-- | net/dccp/dccp.h | 1 | ||||
-rw-r--r-- | net/dccp/proto.c | 10 |
2 files changed, 11 insertions, 0 deletions
diff --git a/net/dccp/dccp.h b/net/dccp/dccp.h index 33d86f53138b..3a94625a1af3 100644 --- a/net/dccp/dccp.h +++ b/net/dccp/dccp.h | |||
@@ -87,6 +87,7 @@ extern int sysctl_dccp_feat_tx_ccid; | |||
87 | extern int sysctl_dccp_feat_ack_ratio; | 87 | extern int sysctl_dccp_feat_ack_ratio; |
88 | extern int sysctl_dccp_feat_send_ack_vector; | 88 | extern int sysctl_dccp_feat_send_ack_vector; |
89 | extern int sysctl_dccp_feat_send_ndp_count; | 89 | extern int sysctl_dccp_feat_send_ndp_count; |
90 | extern int sysctl_dccp_tx_qlen; | ||
90 | 91 | ||
91 | /* is seq1 < seq2 ? */ | 92 | /* is seq1 < seq2 ? */ |
92 | static inline int before48(const u64 seq1, const u64 seq2) | 93 | static inline int before48(const u64 seq1, const u64 seq2) |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 0225bdacd3b1..a7f345c8d0db 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
@@ -52,6 +52,9 @@ struct inet_hashinfo __cacheline_aligned dccp_hashinfo = { | |||
52 | 52 | ||
53 | EXPORT_SYMBOL_GPL(dccp_hashinfo); | 53 | EXPORT_SYMBOL_GPL(dccp_hashinfo); |
54 | 54 | ||
55 | /* the maximum queue length for tx in packets. 0 is no limit */ | ||
56 | int sysctl_dccp_tx_qlen __read_mostly = 5; | ||
57 | |||
55 | void dccp_set_state(struct sock *sk, const int state) | 58 | void dccp_set_state(struct sock *sk, const int state) |
56 | { | 59 | { |
57 | const int oldstate = sk->sk_state; | 60 | const int oldstate = sk->sk_state; |
@@ -645,6 +648,13 @@ int dccp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, | |||
645 | return -EMSGSIZE; | 648 | return -EMSGSIZE; |
646 | 649 | ||
647 | lock_sock(sk); | 650 | lock_sock(sk); |
651 | |||
652 | if (sysctl_dccp_tx_qlen && | ||
653 | (sk->sk_write_queue.qlen >= sysctl_dccp_tx_qlen)) { | ||
654 | rc = -EAGAIN; | ||
655 | goto out_release; | ||
656 | } | ||
657 | |||
648 | timeo = sock_sndtimeo(sk, noblock); | 658 | timeo = sock_sndtimeo(sk, noblock); |
649 | 659 | ||
650 | /* | 660 | /* |