[TIMEWAIT]: Introduce inet_timewait_death_row
That groups all of the tables and variables associated to the TCP timewait schedulling/recycling/killing code, that now can be isolated from the TCP specific code and used by other transport protocols, such as DCCP. Next changeset will move this code to net/ipv4/inet_timewait_sock.c Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
0b4e03bf0b
commit
295ff7edb8
@@ -19,13 +19,69 @@
|
||||
|
||||
#include <linux/ip.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
#include <net/sock.h>
|
||||
#include <net/tcp_states.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
||||
struct inet_hashinfo;
|
||||
|
||||
#define INET_TWDR_RECYCLE_SLOTS_LOG 5
|
||||
#define INET_TWDR_RECYCLE_SLOTS (1 << INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
|
||||
/*
|
||||
* If time > 4sec, it is "slow" path, no recycling is required,
|
||||
* so that we select tick to get range about 4 seconds.
|
||||
*/
|
||||
#if HZ <= 16 || HZ > 4096
|
||||
# error Unsupported: HZ <= 16 or HZ > 4096
|
||||
#elif HZ <= 32
|
||||
# define INET_TWDR_RECYCLE_TICK (5 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 64
|
||||
# define INET_TWDR_RECYCLE_TICK (6 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 128
|
||||
# define INET_TWDR_RECYCLE_TICK (7 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 256
|
||||
# define INET_TWDR_RECYCLE_TICK (8 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 512
|
||||
# define INET_TWDR_RECYCLE_TICK (9 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 1024
|
||||
# define INET_TWDR_RECYCLE_TICK (10 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 2048
|
||||
# define INET_TWDR_RECYCLE_TICK (11 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#else
|
||||
# define INET_TWDR_RECYCLE_TICK (12 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||
#endif
|
||||
|
||||
/* TIME_WAIT reaping mechanism. */
|
||||
#define INET_TWDR_TWKILL_SLOTS 8 /* Please keep this a power of 2. */
|
||||
|
||||
#define INET_TWDR_TWKILL_QUOTA 100
|
||||
|
||||
struct inet_timewait_death_row {
|
||||
/* Short-time timewait calendar */
|
||||
int twcal_hand;
|
||||
int twcal_jiffie;
|
||||
struct timer_list twcal_timer;
|
||||
struct hlist_head twcal_row[INET_TWDR_RECYCLE_SLOTS];
|
||||
|
||||
spinlock_t death_lock;
|
||||
int tw_count;
|
||||
int period;
|
||||
u32 thread_slots;
|
||||
struct work_struct twkill_work;
|
||||
struct timer_list tw_timer;
|
||||
int slot;
|
||||
struct hlist_head cells[INET_TWDR_TWKILL_SLOTS];
|
||||
struct inet_hashinfo *hashinfo;
|
||||
int sysctl_tw_recycle;
|
||||
int sysctl_max_tw_buckets;
|
||||
};
|
||||
|
||||
#if (BITS_PER_LONG == 64)
|
||||
#define INET_TIMEWAIT_ADDRCMP_ALIGN_BYTES 8
|
||||
#else
|
||||
@@ -33,7 +89,6 @@
|
||||
#endif
|
||||
|
||||
struct inet_bind_bucket;
|
||||
struct inet_hashinfo;
|
||||
|
||||
/*
|
||||
* This is a TIME_WAIT sock. It works around the memory consumption
|
||||
|
@@ -29,6 +29,7 @@
|
||||
#include <linux/percpu.h>
|
||||
|
||||
#include <net/inet_connection_sock.h>
|
||||
#include <net/inet_timewait_sock.h>
|
||||
#include <net/inet_hashtables.h>
|
||||
#include <net/checksum.h>
|
||||
#include <net/request_sock.h>
|
||||
@@ -42,9 +43,9 @@
|
||||
extern struct inet_hashinfo tcp_hashinfo;
|
||||
|
||||
extern atomic_t tcp_orphan_count;
|
||||
extern int tcp_tw_count;
|
||||
extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
extern void tcp_tw_deschedule(struct inet_timewait_sock *tw);
|
||||
extern void inet_twsk_deschedule(struct inet_timewait_sock *tw,
|
||||
struct inet_timewait_death_row *twdr);
|
||||
|
||||
#define MAX_TCP_HEADER (128 + MAX_HEADER)
|
||||
|
||||
@@ -148,33 +149,6 @@ extern void tcp_tw_deschedule(struct inet_timewait_sock *tw);
|
||||
* timestamps. It must be less than
|
||||
* minimal timewait lifetime.
|
||||
*/
|
||||
|
||||
#define TCP_TW_RECYCLE_SLOTS_LOG 5
|
||||
#define TCP_TW_RECYCLE_SLOTS (1<<TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
|
||||
/* If time > 4sec, it is "slow" path, no recycling is required,
|
||||
so that we select tick to get range about 4 seconds.
|
||||
*/
|
||||
|
||||
#if HZ <= 16 || HZ > 4096
|
||||
# error Unsupported: HZ <= 16 or HZ > 4096
|
||||
#elif HZ <= 32
|
||||
# define TCP_TW_RECYCLE_TICK (5+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 64
|
||||
# define TCP_TW_RECYCLE_TICK (6+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 128
|
||||
# define TCP_TW_RECYCLE_TICK (7+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 256
|
||||
# define TCP_TW_RECYCLE_TICK (8+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 512
|
||||
# define TCP_TW_RECYCLE_TICK (9+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 1024
|
||||
# define TCP_TW_RECYCLE_TICK (10+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#elif HZ <= 2048
|
||||
# define TCP_TW_RECYCLE_TICK (11+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#else
|
||||
# define TCP_TW_RECYCLE_TICK (12+2-TCP_TW_RECYCLE_SLOTS_LOG)
|
||||
#endif
|
||||
/*
|
||||
* TCP option
|
||||
*/
|
||||
@@ -209,12 +183,13 @@ extern void tcp_tw_deschedule(struct inet_timewait_sock *tw);
|
||||
#define TCP_NAGLE_CORK 2 /* Socket is corked */
|
||||
#define TCP_NAGLE_PUSH 4 /* Cork is overriden for already queued data */
|
||||
|
||||
extern struct inet_timewait_death_row tcp_death_row;
|
||||
|
||||
/* sysctl variables for tcp */
|
||||
extern int sysctl_tcp_timestamps;
|
||||
extern int sysctl_tcp_window_scaling;
|
||||
extern int sysctl_tcp_sack;
|
||||
extern int sysctl_tcp_fin_timeout;
|
||||
extern int sysctl_tcp_tw_recycle;
|
||||
extern int sysctl_tcp_keepalive_time;
|
||||
extern int sysctl_tcp_keepalive_probes;
|
||||
extern int sysctl_tcp_keepalive_intvl;
|
||||
@@ -229,7 +204,6 @@ extern int sysctl_tcp_stdurg;
|
||||
extern int sysctl_tcp_rfc1337;
|
||||
extern int sysctl_tcp_abort_on_overflow;
|
||||
extern int sysctl_tcp_max_orphans;
|
||||
extern int sysctl_tcp_max_tw_buckets;
|
||||
extern int sysctl_tcp_fack;
|
||||
extern int sysctl_tcp_reordering;
|
||||
extern int sysctl_tcp_ecn;
|
||||
|
Reference in New Issue
Block a user