@@ -359,7 +359,6 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
359
359
ndev -> addr_gen_mode = IN6_ADDR_GEN_MODE_EUI64 ;
360
360
361
361
ndev -> cnf .mtu6 = dev -> mtu ;
362
- ndev -> cnf .sysctl = NULL ;
363
362
ndev -> nd_parms = neigh_parms_alloc (dev , & nd_tbl );
364
363
if (!ndev -> nd_parms ) {
365
364
kfree (ndev );
@@ -5620,13 +5619,7 @@ int addrconf_sysctl_ignore_routes_with_linkdown(struct ctl_table *ctl,
5620
5619
return ret ;
5621
5620
}
5622
5621
5623
- static struct addrconf_sysctl_table
5624
- {
5625
- struct ctl_table_header * sysctl_header ;
5626
- struct ctl_table addrconf_vars [DEVCONF_MAX + 1 ];
5627
- } addrconf_sysctl __read_mostly = {
5628
- .sysctl_header = NULL ,
5629
- .addrconf_vars = {
5622
+ static const struct ctl_table addrconf_sysctl [] = {
5630
5623
{
5631
5624
.procname = "forwarding" ,
5632
5625
.data = & ipv6_devconf .forwarding ,
@@ -5944,52 +5937,50 @@ static struct addrconf_sysctl_table
5944
5937
{
5945
5938
/* sentinel */
5946
5939
}
5947
- },
5948
5940
};
5949
5941
5950
5942
static int __addrconf_sysctl_register (struct net * net , char * dev_name ,
5951
5943
struct inet6_dev * idev , struct ipv6_devconf * p )
5952
5944
{
5953
5945
int i ;
5954
- struct addrconf_sysctl_table * t ;
5946
+ struct ctl_table * table ;
5955
5947
char path [sizeof ("net/ipv6/conf/" ) + IFNAMSIZ ];
5956
5948
5957
- t = kmemdup (& addrconf_sysctl , sizeof (* t ), GFP_KERNEL );
5958
- if (!t )
5949
+ table = kmemdup (addrconf_sysctl , sizeof (addrconf_sysctl ), GFP_KERNEL );
5950
+ if (!table )
5959
5951
goto out ;
5960
5952
5961
- for (i = 0 ; t -> addrconf_vars [i ].data ; i ++ ) {
5962
- t -> addrconf_vars [i ].data += (char * )p - (char * )& ipv6_devconf ;
5963
- t -> addrconf_vars [i ].extra1 = idev ; /* embedded; no ref */
5964
- t -> addrconf_vars [i ].extra2 = net ;
5953
+ for (i = 0 ; table [i ].data ; i ++ ) {
5954
+ table [i ].data += (char * )p - (char * )& ipv6_devconf ;
5955
+ table [i ].extra1 = idev ; /* embedded; no ref */
5956
+ table [i ].extra2 = net ;
5965
5957
}
5966
5958
5967
5959
snprintf (path , sizeof (path ), "net/ipv6/conf/%s" , dev_name );
5968
5960
5969
- t -> sysctl_header = register_net_sysctl (net , path , t -> addrconf_vars );
5970
- if (!t -> sysctl_header )
5961
+ p -> sysctl_header = register_net_sysctl (net , path , table );
5962
+ if (!p -> sysctl_header )
5971
5963
goto free ;
5972
5964
5973
- p -> sysctl = t ;
5974
5965
return 0 ;
5975
5966
5976
5967
free :
5977
- kfree (t );
5968
+ kfree (table );
5978
5969
out :
5979
5970
return - ENOBUFS ;
5980
5971
}
5981
5972
5982
5973
static void __addrconf_sysctl_unregister (struct ipv6_devconf * p )
5983
5974
{
5984
- struct addrconf_sysctl_table * t ;
5975
+ struct ctl_table * table ;
5985
5976
5986
- if (!p -> sysctl )
5977
+ if (!p -> sysctl_header )
5987
5978
return ;
5988
5979
5989
- t = p -> sysctl ;
5990
- p -> sysctl = NULL ;
5991
- unregister_net_sysctl_table ( t -> sysctl_header ) ;
5992
- kfree (t );
5980
+ table = p -> sysctl_header -> ctl_table_arg ;
5981
+ unregister_net_sysctl_table ( p -> sysctl_header ) ;
5982
+ p -> sysctl_header = NULL ;
5983
+ kfree (table );
5993
5984
}
5994
5985
5995
5986
static int addrconf_sysctl_register (struct inet6_dev * idev )
0 commit comments