On Thu 10-10-24 23:22:09, Kaixiong Yu wrote: > The dirtytime_expire_interval belongs to fs/fs-writeback.c, move it to > fs/fs-writeback.c from /kernel/sysctl.c. And remove the useless extern > variable declaration and the function declaration from > include/linux/writeback.h > > Signed-off-by: Kaixiong Yu <yukaixiong@xxxxxxxxxx> > Reviewed-by: Kees Cook <kees@xxxxxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > v3: > - change dirtytime_expire_interval to static type > - change the title > --- > fs/fs-writeback.c | 30 +++++++++++++++++++++--------- > include/linux/writeback.h | 4 ---- > kernel/sysctl.c | 8 -------- > 3 files changed, 21 insertions(+), 21 deletions(-) > > diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c > index d8bec3c1bb1f..4fedefdb8e15 100644 > --- a/fs/fs-writeback.c > +++ b/fs/fs-writeback.c > @@ -65,7 +65,7 @@ struct wb_writeback_work { > * timestamps written to disk after 12 hours, but in the worst case a > * few inodes might not their timestamps updated for 24 hours. > */ > -unsigned int dirtytime_expire_interval = 12 * 60 * 60; > +static unsigned int dirtytime_expire_interval = 12 * 60 * 60; > > static inline struct inode *wb_inode(struct list_head *head) > { > @@ -2413,14 +2413,7 @@ static void wakeup_dirtytime_writeback(struct work_struct *w) > schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ); > } > > -static int __init start_dirtytime_writeback(void) > -{ > - schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ); > - return 0; > -} > -__initcall(start_dirtytime_writeback); > - > -int dirtytime_interval_handler(const struct ctl_table *table, int write, > +static int dirtytime_interval_handler(const struct ctl_table *table, int write, > void *buffer, size_t *lenp, loff_t *ppos) > { > int ret; > @@ -2431,6 +2424,25 @@ int dirtytime_interval_handler(const struct ctl_table *table, int write, > return ret; > } > > +static struct ctl_table vm_fs_writeback_table[] = { > + { > + .procname = "dirtytime_expire_seconds", > + .data = &dirtytime_expire_interval, > + .maxlen = sizeof(dirtytime_expire_interval), > + .mode = 0644, > + .proc_handler = dirtytime_interval_handler, > + .extra1 = SYSCTL_ZERO, > + }, > +}; > + > +static int __init start_dirtytime_writeback(void) > +{ > + schedule_delayed_work(&dirtytime_work, dirtytime_expire_interval * HZ); > + register_sysctl_init("vm", vm_fs_writeback_table); > + return 0; > +} > +__initcall(start_dirtytime_writeback); > + > /** > * __mark_inode_dirty - internal function to mark an inode dirty > * > diff --git a/include/linux/writeback.h b/include/linux/writeback.h > index d6db822e4bb3..5f35b24aff7b 100644 > --- a/include/linux/writeback.h > +++ b/include/linux/writeback.h > @@ -351,12 +351,8 @@ extern struct wb_domain global_wb_domain; > /* These are exported to sysctl. */ > extern unsigned int dirty_writeback_interval; > extern unsigned int dirty_expire_interval; > -extern unsigned int dirtytime_expire_interval; > extern int laptop_mode; > > -int dirtytime_interval_handler(const struct ctl_table *table, int write, > - void *buffer, size_t *lenp, loff_t *ppos); > - > void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty); > unsigned long wb_calc_thresh(struct bdi_writeback *wb, unsigned long thresh); > unsigned long cgwb_calc_thresh(struct bdi_writeback *wb); > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index d3de31ec74bf..373e018b950c 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -2024,14 +2024,6 @@ static struct ctl_table kern_table[] = { > }; > > static struct ctl_table vm_table[] = { > - { > - .procname = "dirtytime_expire_seconds", > - .data = &dirtytime_expire_interval, > - .maxlen = sizeof(dirtytime_expire_interval), > - .mode = 0644, > - .proc_handler = dirtytime_interval_handler, > - .extra1 = SYSCTL_ZERO, > - }, > { > .procname = "drop_caches", > .data = &sysctl_drop_caches, > -- > 2.34.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR