Message ID | 1426533260-3305-3-git-send-email-tytso@mit.edu (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon 16-03-15 15:14:20, Ted Tso wrote: > Add a tuning knob so we can adjust the dirtytime expiration timeout, > which is very useful for testing lazytime. > > Signed-off-by: Theodore Ts'o <tytso@mit.edu> > Cc: stable@vger.kernel.org CC to stable isn't needed. Otherwise: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/fs-writeback.c | 11 +++++++++++ > include/linux/writeback.h | 3 +++ > kernel/sysctl.c | 8 ++++++++ > 3 files changed, 22 insertions(+) > > diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c > index ae13fba..d6fa722 100644 > --- a/fs/fs-writeback.c > +++ b/fs/fs-writeback.c > @@ -1188,6 +1188,17 @@ static int __init start_dirtytime_writeback(void) > } > __initcall(start_dirtytime_writeback); > > +int dirtytime_interval_handler(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos) > +{ > + int ret; > + > + ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); > + if (ret == 0 && write) > + mod_delayed_work(system_wq, &dirtytime_work, 0); > + return ret; > +} > + > static noinline void block_dump___mark_inode_dirty(struct inode *inode) > { > if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { > diff --git a/include/linux/writeback.h b/include/linux/writeback.h > index 0004833..b2dd371e 100644 > --- a/include/linux/writeback.h > +++ b/include/linux/writeback.h > @@ -130,6 +130,7 @@ extern int vm_dirty_ratio; > extern unsigned long vm_dirty_bytes; > extern unsigned int dirty_writeback_interval; > extern unsigned int dirty_expire_interval; > +extern unsigned int dirtytime_expire_interval; > extern int vm_highmem_is_dirtyable; > extern int block_dump; > extern int laptop_mode; > @@ -146,6 +147,8 @@ extern int dirty_ratio_handler(struct ctl_table *table, int write, > extern int dirty_bytes_handler(struct ctl_table *table, int write, > void __user *buffer, size_t *lenp, > loff_t *ppos); > +int dirtytime_interval_handler(struct ctl_table *table, int write, > + void __user *buffer, size_t *lenp, loff_t *ppos); > > struct ctl_table; > int dirty_writeback_centisecs_handler(struct ctl_table *, int, > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index 88ea2d6..ce410bb 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -1228,6 +1228,14 @@ static struct ctl_table vm_table[] = { > .extra1 = &zero, > }, > { > + .procname = "dirtytime_expire_seconds", > + .data = &dirtytime_expire_interval, > + .maxlen = sizeof(dirty_expire_interval), > + .mode = 0644, > + .proc_handler = dirtytime_interval_handler, > + .extra1 = &zero, > + }, > + { > .procname = "nr_pdflush_threads", > .mode = 0444 /* read-only */, > .proc_handler = pdflush_proc_obsolete, > -- > 2.3.0 >
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index ae13fba..d6fa722 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -1188,6 +1188,17 @@ static int __init start_dirtytime_writeback(void) } __initcall(start_dirtytime_writeback); +int dirtytime_interval_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) +{ + int ret; + + ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); + if (ret == 0 && write) + mod_delayed_work(system_wq, &dirtytime_work, 0); + return ret; +} + static noinline void block_dump___mark_inode_dirty(struct inode *inode) { if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 0004833..b2dd371e 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h @@ -130,6 +130,7 @@ extern int vm_dirty_ratio; extern unsigned long vm_dirty_bytes; extern unsigned int dirty_writeback_interval; extern unsigned int dirty_expire_interval; +extern unsigned int dirtytime_expire_interval; extern int vm_highmem_is_dirtyable; extern int block_dump; extern int laptop_mode; @@ -146,6 +147,8 @@ extern int dirty_ratio_handler(struct ctl_table *table, int write, extern int dirty_bytes_handler(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos); +int dirtytime_interval_handler(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos); struct ctl_table; int dirty_writeback_centisecs_handler(struct ctl_table *, int, diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 88ea2d6..ce410bb 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1228,6 +1228,14 @@ static struct ctl_table vm_table[] = { .extra1 = &zero, }, { + .procname = "dirtytime_expire_seconds", + .data = &dirtytime_expire_interval, + .maxlen = sizeof(dirty_expire_interval), + .mode = 0644, + .proc_handler = dirtytime_interval_handler, + .extra1 = &zero, + }, + { .procname = "nr_pdflush_threads", .mode = 0444 /* read-only */, .proc_handler = pdflush_proc_obsolete,
Add a tuning knob so we can adjust the dirtytime expiration timeout, which is very useful for testing lazytime. Signed-off-by: Theodore Ts'o <tytso@mit.edu> Cc: stable@vger.kernel.org --- fs/fs-writeback.c | 11 +++++++++++ include/linux/writeback.h | 3 +++ kernel/sysctl.c | 8 ++++++++ 3 files changed, 22 insertions(+)