Commit ab1b4f0a authored by David S. Miller's avatar David S. Miller

Merge branch 'inet-shrink-netns'

Eric Dumazet says:

====================
inet: shrink netns_ipv{4|6}

This patch series work on reducing footprint of netns_ipv4
and netns_ipv6. Some sysctls are converted to bytes,
and some fields are moves to reduce number of holes
and paddings.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 30b8817f 0dd39d95
...@@ -32,14 +32,18 @@ struct inet_hashinfo; ...@@ -32,14 +32,18 @@ struct inet_hashinfo;
struct inet_timewait_death_row { struct inet_timewait_death_row {
atomic_t tw_count; atomic_t tw_count;
char tw_pad[L1_CACHE_BYTES - sizeof(atomic_t)];
struct inet_hashinfo *hashinfo ____cacheline_aligned_in_smp; struct inet_hashinfo *hashinfo;
int sysctl_max_tw_buckets; int sysctl_max_tw_buckets;
}; };
struct tcp_fastopen_context; struct tcp_fastopen_context;
struct netns_ipv4 { struct netns_ipv4 {
/* Please keep tcp_death_row at first field in netns_ipv4 */
struct inet_timewait_death_row tcp_death_row ____cacheline_aligned_in_smp;
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
struct ctl_table_header *forw_hdr; struct ctl_table_header *forw_hdr;
struct ctl_table_header *frags_hdr; struct ctl_table_header *frags_hdr;
...@@ -53,17 +57,17 @@ struct netns_ipv4 { ...@@ -53,17 +57,17 @@ struct netns_ipv4 {
struct mutex ra_mutex; struct mutex ra_mutex;
#ifdef CONFIG_IP_MULTIPLE_TABLES #ifdef CONFIG_IP_MULTIPLE_TABLES
struct fib_rules_ops *rules_ops; struct fib_rules_ops *rules_ops;
bool fib_has_custom_rules;
unsigned int fib_rules_require_fldissect;
struct fib_table __rcu *fib_main; struct fib_table __rcu *fib_main;
struct fib_table __rcu *fib_default; struct fib_table __rcu *fib_default;
unsigned int fib_rules_require_fldissect;
bool fib_has_custom_rules;
#endif #endif
bool fib_has_custom_local_routes; bool fib_has_custom_local_routes;
bool fib_offload_disabled;
#ifdef CONFIG_IP_ROUTE_CLASSID #ifdef CONFIG_IP_ROUTE_CLASSID
int fib_num_tclassid_users; int fib_num_tclassid_users;
#endif #endif
struct hlist_head *fib_table_hash; struct hlist_head *fib_table_hash;
bool fib_offload_disabled;
struct sock *fibnl; struct sock *fibnl;
struct sock * __percpu *icmp_sk; struct sock * __percpu *icmp_sk;
...@@ -167,15 +171,14 @@ struct netns_ipv4 { ...@@ -167,15 +171,14 @@ struct netns_ipv4 {
u8 sysctl_tcp_min_tso_segs; u8 sysctl_tcp_min_tso_segs;
u8 sysctl_tcp_autocorking; u8 sysctl_tcp_autocorking;
u8 sysctl_tcp_reflect_tos; u8 sysctl_tcp_reflect_tos;
u8 sysctl_tcp_comp_sack_nr;
int sysctl_tcp_invalid_ratelimit; int sysctl_tcp_invalid_ratelimit;
int sysctl_tcp_pacing_ss_ratio; int sysctl_tcp_pacing_ss_ratio;
int sysctl_tcp_pacing_ca_ratio; int sysctl_tcp_pacing_ca_ratio;
int sysctl_tcp_wmem[3]; int sysctl_tcp_wmem[3];
int sysctl_tcp_rmem[3]; int sysctl_tcp_rmem[3];
int sysctl_tcp_comp_sack_nr;
unsigned long sysctl_tcp_comp_sack_delay_ns; unsigned long sysctl_tcp_comp_sack_delay_ns;
unsigned long sysctl_tcp_comp_sack_slack_ns; unsigned long sysctl_tcp_comp_sack_slack_ns;
struct inet_timewait_death_row tcp_death_row;
int sysctl_max_syn_backlog; int sysctl_max_syn_backlog;
int sysctl_tcp_fastopen; int sysctl_tcp_fastopen;
const struct tcp_congestion_ops __rcu *tcp_congestion_control; const struct tcp_congestion_ops __rcu *tcp_congestion_control;
...@@ -188,15 +191,15 @@ struct netns_ipv4 { ...@@ -188,15 +191,15 @@ struct netns_ipv4 {
int sysctl_udp_wmem_min; int sysctl_udp_wmem_min;
int sysctl_udp_rmem_min; int sysctl_udp_rmem_min;
int sysctl_fib_notify_on_flag_change; u8 sysctl_fib_notify_on_flag_change;
#ifdef CONFIG_NET_L3_MASTER_DEV #ifdef CONFIG_NET_L3_MASTER_DEV
int sysctl_udp_l3mdev_accept; u8 sysctl_udp_l3mdev_accept;
#endif #endif
u8 sysctl_igmp_llm_reports;
int sysctl_igmp_max_memberships; int sysctl_igmp_max_memberships;
int sysctl_igmp_max_msf; int sysctl_igmp_max_msf;
int sysctl_igmp_llm_reports;
int sysctl_igmp_qrv; int sysctl_igmp_qrv;
struct ping_group_range ping_group_range; struct ping_group_range ping_group_range;
...@@ -217,8 +220,8 @@ struct netns_ipv4 { ...@@ -217,8 +220,8 @@ struct netns_ipv4 {
#endif #endif
#endif #endif
#ifdef CONFIG_IP_ROUTE_MULTIPATH #ifdef CONFIG_IP_ROUTE_MULTIPATH
int sysctl_fib_multipath_use_neigh; u8 sysctl_fib_multipath_use_neigh;
int sysctl_fib_multipath_hash_policy; u8 sysctl_fib_multipath_hash_policy;
#endif #endif
struct fib_notifier_ops *notifier_ops; struct fib_notifier_ops *notifier_ops;
......
...@@ -20,7 +20,6 @@ struct netns_sysctl_ipv6 { ...@@ -20,7 +20,6 @@ struct netns_sysctl_ipv6 {
struct ctl_table_header *frags_hdr; struct ctl_table_header *frags_hdr;
struct ctl_table_header *xfrm6_hdr; struct ctl_table_header *xfrm6_hdr;
#endif #endif
int bindv6only;
int flush_delay; int flush_delay;
int ip6_rt_max_size; int ip6_rt_max_size;
int ip6_rt_gc_min_interval; int ip6_rt_gc_min_interval;
...@@ -29,21 +28,22 @@ struct netns_sysctl_ipv6 { ...@@ -29,21 +28,22 @@ struct netns_sysctl_ipv6 {
int ip6_rt_gc_elasticity; int ip6_rt_gc_elasticity;
int ip6_rt_mtu_expires; int ip6_rt_mtu_expires;
int ip6_rt_min_advmss; int ip6_rt_min_advmss;
int multipath_hash_policy; u8 bindv6only;
int flowlabel_consistency; u8 multipath_hash_policy;
int auto_flowlabels; u8 flowlabel_consistency;
u8 auto_flowlabels;
int icmpv6_time; int icmpv6_time;
int icmpv6_echo_ignore_all; u8 icmpv6_echo_ignore_all;
int icmpv6_echo_ignore_multicast; u8 icmpv6_echo_ignore_multicast;
int icmpv6_echo_ignore_anycast; u8 icmpv6_echo_ignore_anycast;
DECLARE_BITMAP(icmpv6_ratemask, ICMPV6_MSG_MAX + 1); DECLARE_BITMAP(icmpv6_ratemask, ICMPV6_MSG_MAX + 1);
unsigned long *icmpv6_ratemask_ptr; unsigned long *icmpv6_ratemask_ptr;
int anycast_src_echo_reply; u8 anycast_src_echo_reply;
int ip_nonlocal_bind; u8 ip_nonlocal_bind;
int fwmark_reflect; u8 fwmark_reflect;
u8 flowlabel_state_ranges;
int idgen_retries; int idgen_retries;
int idgen_delay; int idgen_delay;
int flowlabel_state_ranges;
int flowlabel_reflect; int flowlabel_reflect;
int max_dst_opts_cnt; int max_dst_opts_cnt;
int max_hbh_opts_cnt; int max_hbh_opts_cnt;
...@@ -51,10 +51,13 @@ struct netns_sysctl_ipv6 { ...@@ -51,10 +51,13 @@ struct netns_sysctl_ipv6 {
int max_hbh_opts_len; int max_hbh_opts_len;
int seg6_flowlabel; int seg6_flowlabel;
bool skip_notify_on_dev_down; bool skip_notify_on_dev_down;
int fib_notify_on_flag_change; u8 fib_notify_on_flag_change;
}; };
struct netns_ipv6 { struct netns_ipv6 {
/* Keep ip6_dst_ops at the beginning of netns_sysctl_ipv6 */
struct dst_ops ip6_dst_ops;
struct netns_sysctl_ipv6 sysctl; struct netns_sysctl_ipv6 sysctl;
struct ipv6_devconf *devconf_all; struct ipv6_devconf *devconf_all;
struct ipv6_devconf *devconf_dflt; struct ipv6_devconf *devconf_dflt;
...@@ -76,7 +79,6 @@ struct netns_ipv6 { ...@@ -76,7 +79,6 @@ struct netns_ipv6 {
struct hlist_head *fib_table_hash; struct hlist_head *fib_table_hash;
struct fib6_table *fib6_main_tbl; struct fib6_table *fib6_main_tbl;
struct list_head fib6_walkers; struct list_head fib6_walkers;
struct dst_ops ip6_dst_ops;
rwlock_t fib6_walker_lock; rwlock_t fib6_walker_lock;
spinlock_t fib6_gc_lock; spinlock_t fib6_gc_lock;
unsigned int ip6_rt_gc_expire; unsigned int ip6_rt_gc_expire;
......
...@@ -46,7 +46,6 @@ static int tcp_syn_retries_min = 1; ...@@ -46,7 +46,6 @@ static int tcp_syn_retries_min = 1;
static int tcp_syn_retries_max = MAX_TCP_SYNCNT; static int tcp_syn_retries_max = MAX_TCP_SYNCNT;
static int ip_ping_group_range_min[] = { 0, 0 }; static int ip_ping_group_range_min[] = { 0, 0 };
static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX }; static int ip_ping_group_range_max[] = { GID_T_MAX, GID_T_MAX };
static int comp_sack_nr_max = 255;
static u32 u32_max_div_HZ = UINT_MAX / HZ; static u32 u32_max_div_HZ = UINT_MAX / HZ;
static int one_day_secs = 24 * 3600; static int one_day_secs = 24 * 3600;
...@@ -456,7 +455,7 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write, ...@@ -456,7 +455,7 @@ static int proc_fib_multipath_hash_policy(struct ctl_table *table, int write,
ipv4.sysctl_fib_multipath_hash_policy); ipv4.sysctl_fib_multipath_hash_policy);
int ret; int ret;
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
if (write && ret == 0) if (write && ret == 0)
call_netevent_notifiers(NETEVENT_IPV4_MPATH_HASH_UPDATE, net); call_netevent_notifiers(NETEVENT_IPV4_MPATH_HASH_UPDATE, net);
...@@ -848,9 +847,9 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -848,9 +847,9 @@ static struct ctl_table ipv4_net_table[] = {
{ {
.procname = "igmp_link_local_mcast_reports", .procname = "igmp_link_local_mcast_reports",
.data = &init_net.ipv4.sysctl_igmp_llm_reports, .data = &init_net.ipv4.sysctl_igmp_llm_reports,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "igmp_max_memberships", .procname = "igmp_max_memberships",
...@@ -1038,16 +1037,16 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1038,16 +1037,16 @@ static struct ctl_table ipv4_net_table[] = {
{ {
.procname = "fib_multipath_use_neigh", .procname = "fib_multipath_use_neigh",
.data = &init_net.ipv4.sysctl_fib_multipath_use_neigh, .data = &init_net.ipv4.sysctl_fib_multipath_use_neigh,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE, .extra2 = SYSCTL_ONE,
}, },
{ {
.procname = "fib_multipath_hash_policy", .procname = "fib_multipath_hash_policy",
.data = &init_net.ipv4.sysctl_fib_multipath_hash_policy, .data = &init_net.ipv4.sysctl_fib_multipath_hash_policy,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_fib_multipath_hash_policy, .proc_handler = proc_fib_multipath_hash_policy,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
...@@ -1065,9 +1064,9 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1065,9 +1064,9 @@ static struct ctl_table ipv4_net_table[] = {
{ {
.procname = "udp_l3mdev_accept", .procname = "udp_l3mdev_accept",
.data = &init_net.ipv4.sysctl_udp_l3mdev_accept, .data = &init_net.ipv4.sysctl_udp_l3mdev_accept,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = SYSCTL_ONE, .extra2 = SYSCTL_ONE,
}, },
...@@ -1330,11 +1329,10 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1330,11 +1329,10 @@ static struct ctl_table ipv4_net_table[] = {
{ {
.procname = "tcp_comp_sack_nr", .procname = "tcp_comp_sack_nr",
.data = &init_net.ipv4.sysctl_tcp_comp_sack_nr, .data = &init_net.ipv4.sysctl_tcp_comp_sack_nr,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = &comp_sack_nr_max,
}, },
{ {
.procname = "tcp_reflect_tos", .procname = "tcp_reflect_tos",
...@@ -1364,9 +1362,9 @@ static struct ctl_table ipv4_net_table[] = { ...@@ -1364,9 +1362,9 @@ static struct ctl_table ipv4_net_table[] = {
{ {
.procname = "fib_notify_on_flag_change", .procname = "fib_notify_on_flag_change",
.data = &init_net.ipv4.sysctl_fib_notify_on_flag_change, .data = &init_net.ipv4.sysctl_fib_notify_on_flag_change,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = &two, .extra2 = &two,
}, },
......
...@@ -1169,23 +1169,23 @@ static struct ctl_table ipv6_icmp_table_template[] = { ...@@ -1169,23 +1169,23 @@ static struct ctl_table ipv6_icmp_table_template[] = {
{ {
.procname = "echo_ignore_all", .procname = "echo_ignore_all",
.data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_all, .data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_all,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec, .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "echo_ignore_multicast", .procname = "echo_ignore_multicast",
.data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_multicast, .data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_multicast,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec, .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "echo_ignore_anycast", .procname = "echo_ignore_anycast",
.data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_anycast, .data = &init_net.ipv6.sysctl.icmpv6_echo_ignore_anycast,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec, .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "ratemask", .procname = "ratemask",
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
static int two = 2; static int two = 2;
static int flowlabel_reflect_max = 0x7; static int flowlabel_reflect_max = 0x7;
static int auto_flowlabels_min;
static int auto_flowlabels_max = IP6_AUTO_FLOW_LABEL_MAX; static int auto_flowlabels_max = IP6_AUTO_FLOW_LABEL_MAX;
static int proc_rt6_multipath_hash_policy(struct ctl_table *table, int write, static int proc_rt6_multipath_hash_policy(struct ctl_table *table, int write,
...@@ -34,7 +33,7 @@ static int proc_rt6_multipath_hash_policy(struct ctl_table *table, int write, ...@@ -34,7 +33,7 @@ static int proc_rt6_multipath_hash_policy(struct ctl_table *table, int write,
net = container_of(table->data, struct net, net = container_of(table->data, struct net,
ipv6.sysctl.multipath_hash_policy); ipv6.sysctl.multipath_hash_policy);
ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); ret = proc_dou8vec_minmax(table, write, buffer, lenp, ppos);
if (write && ret == 0) if (write && ret == 0)
call_netevent_notifiers(NETEVENT_IPV6_MPATH_HASH_UPDATE, net); call_netevent_notifiers(NETEVENT_IPV6_MPATH_HASH_UPDATE, net);
...@@ -45,39 +44,38 @@ static struct ctl_table ipv6_table_template[] = { ...@@ -45,39 +44,38 @@ static struct ctl_table ipv6_table_template[] = {
{ {
.procname = "bindv6only", .procname = "bindv6only",
.data = &init_net.ipv6.sysctl.bindv6only, .data = &init_net.ipv6.sysctl.bindv6only,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "anycast_src_echo_reply", .procname = "anycast_src_echo_reply",
.data = &init_net.ipv6.sysctl.anycast_src_echo_reply, .data = &init_net.ipv6.sysctl.anycast_src_echo_reply,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "flowlabel_consistency", .procname = "flowlabel_consistency",
.data = &init_net.ipv6.sysctl.flowlabel_consistency, .data = &init_net.ipv6.sysctl.flowlabel_consistency,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "auto_flowlabels", .procname = "auto_flowlabels",
.data = &init_net.ipv6.sysctl.auto_flowlabels, .data = &init_net.ipv6.sysctl.auto_flowlabels,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = &auto_flowlabels_min,
.extra2 = &auto_flowlabels_max .extra2 = &auto_flowlabels_max
}, },
{ {
.procname = "fwmark_reflect", .procname = "fwmark_reflect",
.data = &init_net.ipv6.sysctl.fwmark_reflect, .data = &init_net.ipv6.sysctl.fwmark_reflect,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "idgen_retries", .procname = "idgen_retries",
...@@ -96,16 +94,16 @@ static struct ctl_table ipv6_table_template[] = { ...@@ -96,16 +94,16 @@ static struct ctl_table ipv6_table_template[] = {
{ {
.procname = "flowlabel_state_ranges", .procname = "flowlabel_state_ranges",
.data = &init_net.ipv6.sysctl.flowlabel_state_ranges, .data = &init_net.ipv6.sysctl.flowlabel_state_ranges,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "ip_nonlocal_bind", .procname = "ip_nonlocal_bind",
.data = &init_net.ipv6.sysctl.ip_nonlocal_bind, .data = &init_net.ipv6.sysctl.ip_nonlocal_bind,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec .proc_handler = proc_dou8vec_minmax,
}, },
{ {
.procname = "flowlabel_reflect", .procname = "flowlabel_reflect",
...@@ -147,7 +145,7 @@ static struct ctl_table ipv6_table_template[] = { ...@@ -147,7 +145,7 @@ static struct ctl_table ipv6_table_template[] = {
{ {
.procname = "fib_multipath_hash_policy", .procname = "fib_multipath_hash_policy",
.data = &init_net.ipv6.sysctl.multipath_hash_policy, .data = &init_net.ipv6.sysctl.multipath_hash_policy,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_rt6_multipath_hash_policy, .proc_handler = proc_rt6_multipath_hash_policy,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
...@@ -163,9 +161,9 @@ static struct ctl_table ipv6_table_template[] = { ...@@ -163,9 +161,9 @@ static struct ctl_table ipv6_table_template[] = {
{ {
.procname = "fib_notify_on_flag_change", .procname = "fib_notify_on_flag_change",
.data = &init_net.ipv6.sysctl.fib_notify_on_flag_change, .data = &init_net.ipv6.sysctl.fib_notify_on_flag_change,
.maxlen = sizeof(int), .maxlen = sizeof(u8),
.mode = 0644, .mode = 0644,
.proc_handler = proc_dointvec_minmax, .proc_handler = proc_dou8vec_minmax,
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = &two, .extra2 = &two,
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment