Skip to content

Commit ef547f2

Browse files
Eric Dumazetdavem330
Eric Dumazet
authored andcommitted
tcp: remove max_qlen_log
This control variable was set at first listen(fd, backlog) call, but not updated if application tried to increase or decrease backlog. It made sense at the time listener had a non resizeable hash table. Also rounding to powers of two was not very friendly. Signed-off-by: Eric Dumazet <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 10cbc8f commit ef547f2

File tree

4 files changed

+6
-18
lines changed

4 files changed

+6
-18
lines changed

include/net/inet_connection_sock.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ static inline int inet_csk_reqsk_queue_young(const struct sock *sk)
295295

296296
static inline int inet_csk_reqsk_queue_is_full(const struct sock *sk)
297297
{
298-
return reqsk_queue_is_full(&inet_csk(sk)->icsk_accept_queue);
298+
return inet_csk_reqsk_queue_len(sk) >= sk->sk_max_ack_backlog;
299299
}
300300

301301
void inet_csk_reqsk_queue_drop(struct sock *sk, struct request_sock *req);

include/net/request_sock.h

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ struct fastopen_queue {
157157
struct request_sock_queue {
158158
spinlock_t rskq_lock;
159159
u8 rskq_defer_accept;
160-
u8 max_qlen_log;
160+
161161
u32 synflood_warned;
162162
atomic_t qlen;
163163
atomic_t young;
@@ -169,8 +169,7 @@ struct request_sock_queue {
169169
*/
170170
};
171171

172-
void reqsk_queue_alloc(struct request_sock_queue *queue,
173-
unsigned int nr_table_entries);
172+
void reqsk_queue_alloc(struct request_sock_queue *queue);
174173

175174
void reqsk_fastopen_remove(struct sock *sk, struct request_sock *req,
176175
bool reset);
@@ -240,9 +239,4 @@ static inline int reqsk_queue_len_young(const struct request_sock_queue *queue)
240239
return atomic_read(&queue->young);
241240
}
242241

243-
static inline int reqsk_queue_is_full(const struct request_sock_queue *queue)
244-
{
245-
return reqsk_queue_len(queue) >> queue->max_qlen_log;
246-
}
247-
248242
#endif /* _REQUEST_SOCK_H */

net/core/request_sock.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,8 @@
3737
int sysctl_max_syn_backlog = 256;
3838
EXPORT_SYMBOL(sysctl_max_syn_backlog);
3939

40-
void reqsk_queue_alloc(struct request_sock_queue *queue,
41-
unsigned int nr_table_entries)
40+
void reqsk_queue_alloc(struct request_sock_queue *queue)
4241
{
43-
nr_table_entries = min_t(u32, nr_table_entries, sysctl_max_syn_backlog);
44-
nr_table_entries = max_t(u32, nr_table_entries, 8);
45-
nr_table_entries = roundup_pow_of_two(nr_table_entries + 1);
46-
4742
spin_lock_init(&queue->rskq_lock);
4843

4944
spin_lock_init(&queue->fastopenq.lock);
@@ -53,7 +48,6 @@ void reqsk_queue_alloc(struct request_sock_queue *queue,
5348
queue->fastopenq.max_qlen = 0;
5449

5550
queue->rskq_accept_head = NULL;
56-
queue->max_qlen_log = ilog2(nr_table_entries);
5751
}
5852

5953
/*

net/ipv4/inet_connection_sock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ static void reqsk_timer_handler(unsigned long data)
579579
* ones are about to clog our table.
580580
*/
581581
qlen = reqsk_queue_len(queue);
582-
if (qlen >> (queue->max_qlen_log - 1)) {
582+
if ((qlen << 1) > sk_listener->sk_max_ack_backlog) {
583583
int young = reqsk_queue_len_young(queue) << 1;
584584

585585
while (thresh > 2) {
@@ -732,7 +732,7 @@ int inet_csk_listen_start(struct sock *sk, const int nr_table_entries)
732732
struct inet_connection_sock *icsk = inet_csk(sk);
733733
struct inet_sock *inet = inet_sk(sk);
734734

735-
reqsk_queue_alloc(&icsk->icsk_accept_queue, nr_table_entries);
735+
reqsk_queue_alloc(&icsk->icsk_accept_queue);
736736

737737
sk->sk_max_ack_backlog = 0;
738738
sk->sk_ack_backlog = 0;

0 commit comments

Comments
 (0)