Message ID | 20200529074108.16928-12-mcgrof@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | sysctl: spring cleaning | expand |
On Fri, May 29, 2020 at 07:41:06AM +0000, Luis Chamberlain wrote: > From: Xiaoming Ni <nixiaoming@huawei.com> > > Move random_table sysctl from kernel/sysctl.c to drivers/char/random.c > and use register_sysctl_subdir() to help remove the clutter out of > kernel/sysctl.c. > > Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com> > Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> > --- > drivers/char/random.c | 14 ++++++++++++-- > include/linux/sysctl.h | 1 - > kernel/sysctl.c | 5 ----- > 3 files changed, 12 insertions(+), 8 deletions(-) > > diff --git a/drivers/char/random.c b/drivers/char/random.c > index a7cf6aa65908..73fd4b6e9c18 100644 > --- a/drivers/char/random.c > +++ b/drivers/char/random.c > @@ -2101,8 +2101,7 @@ static int proc_do_entropy(struct ctl_table *table, int write, > } > > static int sysctl_poolsize = INPUT_POOL_WORDS * 32; > -extern struct ctl_table random_table[]; > -struct ctl_table random_table[] = { > +static struct ctl_table random_table[] = { > { > .procname = "poolsize", > .data = &sysctl_poolsize, > @@ -2164,6 +2163,17 @@ struct ctl_table random_table[] = { > #endif > { } > }; > + > +/* > + * rand_initialize() is called before sysctl_init(), > + * so we cannot call register_sysctl_init() in rand_initialize() > + */ > +static int __init random_sysctls_init(void) > +{ > + register_sysctl_subdir("kernel", "random", random_table); No error checking? :(
On 2020/5/29 18:26, Greg KH wrote: > On Fri, May 29, 2020 at 07:41:06AM +0000, Luis Chamberlain wrote: >> From: Xiaoming Ni <nixiaoming@huawei.com> >> >> Move random_table sysctl from kernel/sysctl.c to drivers/char/random.c >> and use register_sysctl_subdir() to help remove the clutter out of >> kernel/sysctl.c. >> >> Signed-off-by: Xiaoming Ni <nixiaoming@huawei.com> >> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> >> --- >> drivers/char/random.c | 14 ++++++++++++-- >> include/linux/sysctl.h | 1 - >> kernel/sysctl.c | 5 ----- >> 3 files changed, 12 insertions(+), 8 deletions(-) >> >> diff --git a/drivers/char/random.c b/drivers/char/random.c >> index a7cf6aa65908..73fd4b6e9c18 100644 >> --- a/drivers/char/random.c >> +++ b/drivers/char/random.c >> @@ -2101,8 +2101,7 @@ static int proc_do_entropy(struct ctl_table *table, int write, >> } >> >> static int sysctl_poolsize = INPUT_POOL_WORDS * 32; >> -extern struct ctl_table random_table[]; >> -struct ctl_table random_table[] = { >> +static struct ctl_table random_table[] = { >> { >> .procname = "poolsize", >> .data = &sysctl_poolsize, >> @@ -2164,6 +2163,17 @@ struct ctl_table random_table[] = { >> #endif >> { } >> }; >> + >> +/* >> + * rand_initialize() is called before sysctl_init(), >> + * so we cannot call register_sysctl_init() in rand_initialize() >> + */ >> +static int __init random_sysctls_init(void) >> +{ >> + register_sysctl_subdir("kernel", "random", random_table); > > No error checking? > > :( It was my mistake, I forgot to add a comment here. Same as the comment of register_sysctl_init(), There is almost no failure here during the system initialization phase, and failure in time does not affect the main function. Thanks Xiaoming Ni
diff --git a/drivers/char/random.c b/drivers/char/random.c index a7cf6aa65908..73fd4b6e9c18 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -2101,8 +2101,7 @@ static int proc_do_entropy(struct ctl_table *table, int write, } static int sysctl_poolsize = INPUT_POOL_WORDS * 32; -extern struct ctl_table random_table[]; -struct ctl_table random_table[] = { +static struct ctl_table random_table[] = { { .procname = "poolsize", .data = &sysctl_poolsize, @@ -2164,6 +2163,17 @@ struct ctl_table random_table[] = { #endif { } }; + +/* + * rand_initialize() is called before sysctl_init(), + * so we cannot call register_sysctl_init() in rand_initialize() + */ +static int __init random_sysctls_init(void) +{ + register_sysctl_subdir("kernel", "random", random_table); + return 0; +} +device_initcall(random_sysctls_init); #endif /* CONFIG_SYSCTL */ struct batched_entropy { diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index e5364b69dd95..33a471b56345 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -216,7 +216,6 @@ extern int unaligned_dump_stack; extern int no_unaligned_warning; extern struct ctl_table sysctl_mount_point[]; -extern struct ctl_table random_table[]; #else /* CONFIG_SYSCTL */ static inline struct ctl_table_header *register_sysctl_table(struct ctl_table * table) diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 5c116904feb7..f9a35325d5d5 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2078,11 +2078,6 @@ static struct ctl_table kern_table[] = { .mode = 0644, .proc_handler = sysctl_max_threads, }, - { - .procname = "random", - .mode = 0555, - .child = random_table, - }, { .procname = "usermodehelper", .mode = 0555,