diff options
| author | Theodore Ts'o <tytso@mit.edu> | 2015-03-17 12:23:32 -0400 |
|---|---|---|
| committer | Theodore Ts'o <tytso@mit.edu> | 2015-03-17 12:23:32 -0400 |
| commit | 1efff914afac8a965ad63817ecf8861a927c2ace (patch) | |
| tree | d7b582a4811e957a7dc6abd26629694276e19e2d | |
| parent | a2f4870697a5bcf4a87073ec6b32dd2928c1211d (diff) | |
fs: add dirtytime_expire_seconds sysctl
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>
Reviewed-by: Jan Kara <jack@suse.cz>
| -rw-r--r-- | fs/fs-writeback.c | 11 | ||||
| -rw-r--r-- | include/linux/writeback.h | 3 | ||||
| -rw-r--r-- | kernel/sysctl.c | 8 |
3 files changed, 22 insertions, 0 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 2cfcd74faf87..32a8bbd7a9ad 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
| @@ -1188,6 +1188,17 @@ static int __init start_dirtytime_writeback(void) | |||
| 1188 | } | 1188 | } |
| 1189 | __initcall(start_dirtytime_writeback); | 1189 | __initcall(start_dirtytime_writeback); |
| 1190 | 1190 | ||
| 1191 | int dirtytime_interval_handler(struct ctl_table *table, int write, | ||
| 1192 | void __user *buffer, size_t *lenp, loff_t *ppos) | ||
| 1193 | { | ||
| 1194 | int ret; | ||
| 1195 | |||
| 1196 | ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); | ||
| 1197 | if (ret == 0 && write) | ||
| 1198 | mod_delayed_work(system_wq, &dirtytime_work, 0); | ||
| 1199 | return ret; | ||
| 1200 | } | ||
| 1201 | |||
| 1191 | static noinline void block_dump___mark_inode_dirty(struct inode *inode) | 1202 | static noinline void block_dump___mark_inode_dirty(struct inode *inode) |
| 1192 | { | 1203 | { |
| 1193 | if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { | 1204 | if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) { |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 00048339c23e..b2dd371ec0ca 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -130,6 +130,7 @@ extern int vm_dirty_ratio; | |||
| 130 | extern unsigned long vm_dirty_bytes; | 130 | extern unsigned long vm_dirty_bytes; |
| 131 | extern unsigned int dirty_writeback_interval; | 131 | extern unsigned int dirty_writeback_interval; |
| 132 | extern unsigned int dirty_expire_interval; | 132 | extern unsigned int dirty_expire_interval; |
| 133 | extern unsigned int dirtytime_expire_interval; | ||
| 133 | extern int vm_highmem_is_dirtyable; | 134 | extern int vm_highmem_is_dirtyable; |
| 134 | extern int block_dump; | 135 | extern int block_dump; |
| 135 | extern int laptop_mode; | 136 | extern int laptop_mode; |
| @@ -146,6 +147,8 @@ extern int dirty_ratio_handler(struct ctl_table *table, int write, | |||
| 146 | extern int dirty_bytes_handler(struct ctl_table *table, int write, | 147 | extern int dirty_bytes_handler(struct ctl_table *table, int write, |
| 147 | void __user *buffer, size_t *lenp, | 148 | void __user *buffer, size_t *lenp, |
| 148 | loff_t *ppos); | 149 | loff_t *ppos); |
| 150 | int dirtytime_interval_handler(struct ctl_table *table, int write, | ||
| 151 | void __user *buffer, size_t *lenp, loff_t *ppos); | ||
| 149 | 152 | ||
| 150 | struct ctl_table; | 153 | struct ctl_table; |
| 151 | int dirty_writeback_centisecs_handler(struct ctl_table *, int, | 154 | int dirty_writeback_centisecs_handler(struct ctl_table *, int, |
diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 88ea2d6e0031..ce410bb9f2e1 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c | |||
| @@ -1228,6 +1228,14 @@ static struct ctl_table vm_table[] = { | |||
| 1228 | .extra1 = &zero, | 1228 | .extra1 = &zero, |
| 1229 | }, | 1229 | }, |
| 1230 | { | 1230 | { |
| 1231 | .procname = "dirtytime_expire_seconds", | ||
| 1232 | .data = &dirtytime_expire_interval, | ||
| 1233 | .maxlen = sizeof(dirty_expire_interval), | ||
| 1234 | .mode = 0644, | ||
| 1235 | .proc_handler = dirtytime_interval_handler, | ||
| 1236 | .extra1 = &zero, | ||
| 1237 | }, | ||
| 1238 | { | ||
| 1231 | .procname = "nr_pdflush_threads", | 1239 | .procname = "nr_pdflush_threads", |
| 1232 | .mode = 0444 /* read-only */, | 1240 | .mode = 0444 /* read-only */, |
| 1233 | .proc_handler = pdflush_proc_obsolete, | 1241 | .proc_handler = pdflush_proc_obsolete, |
