Add lazytime patches
[ext4-patch-queue.git] / add-dirtytime-sysctl-tuning-knob
blob96d1ef4b0eb60b6a5e7fa5ebd72405778b1a0374
1 fs: add dirtytime_expire_seconds sysctl
3 Add a tuning knob so we can adjust the dirtytime expiration timeout,
4 which is very useful for testing lazytime.
6 Signed-off-by: Theodore Ts'o <tytso@mit.edu>
7 ---
8  fs/fs-writeback.c         | 5 ++++-
9  include/linux/writeback.h | 1 +
10  kernel/sysctl.c           | 8 ++++++++
11  3 files changed, 13 insertions(+), 1 deletion(-)
13 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
14 index e907052..705f036 100644
15 --- a/fs/fs-writeback.c
16 +++ b/fs/fs-writeback.c
17 @@ -53,6 +53,9 @@ struct wb_writeback_work {
18         struct completion *done;        /* set if the caller waits */
19  };
21 +/* 24 hours in seconds */
22 +unsigned int dirtytime_expire_interval = 24 * 60 * 60;
24  /**
25   * writeback_in_progress - determine whether there is writeback in progress
26   * @bdi: the device's backing_dev_info structure.
27 @@ -276,7 +279,7 @@ static int move_expired_inodes(struct list_head *delaying_queue,
28         if ((flags & EXPIRE_DIRTY_ATIME) == 0)
29                 older_than_this = work->older_than_this;
30         else if ((work->reason == WB_REASON_SYNC) == 0) {
31 -               expire_time = jiffies - (HZ * 86400);
32 +               expire_time = jiffies - (dirtytime_expire_interval * HZ);
33                 older_than_this = &expire_time;
34         }
35         while (!list_empty(delaying_queue)) {
36 diff --git a/include/linux/writeback.h b/include/linux/writeback.h
37 index 0004833..ba65fd0 100644
38 --- a/include/linux/writeback.h
39 +++ b/include/linux/writeback.h
40 @@ -130,6 +130,7 @@ extern int vm_dirty_ratio;
41  extern unsigned long vm_dirty_bytes;
42  extern unsigned int dirty_writeback_interval;
43  extern unsigned int dirty_expire_interval;
44 +extern unsigned int dirtytime_expire_interval;
45  extern int vm_highmem_is_dirtyable;
46  extern int block_dump;
47  extern int laptop_mode;
48 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
49 index 88ea2d6..44e6a25 100644
50 --- a/kernel/sysctl.c
51 +++ b/kernel/sysctl.c
52 @@ -1228,6 +1228,14 @@ static struct ctl_table vm_table[] = {
53                 .extra1         = &zero,
54         },
55         {
56 +               .procname       = "dirtytime_expire_seconds",
57 +               .data           = &dirtytime_expire_interval,
58 +               .maxlen         = sizeof(dirty_expire_interval),
59 +               .mode           = 0644,
60 +               .proc_handler   = proc_dointvec_minmax,
61 +               .extra1         = &zero,
62 +       },
63 +       {
64                 .procname       = "nr_pdflush_threads",
65                 .mode           = 0444 /* read-only */,
66                 .proc_handler   = pdflush_proc_obsolete,