* On Mon, Apr 18, 2011 at 10:02:04AM +1000, Dave Chinner wrote: >On Sun, Apr 17, 2011 at 09:53:08PM +0530, Raghavendra D Prabhu wrote: >> In the function bdi_wakeup_thread_delayed, no checks are performed on >> dirty_writeback_interval unlike other places and timeout is being set to >> zero as result, thus defeating the purpose. So, I have changed it to be >> passed default value of interval which is 500 centiseconds, when it is >> set to zero. >> I have also verified this and tested it. >> Signed-off-by: Raghavendra D Prabhu >> --- >> mm/backing-dev.c | 5 ++++- >> 1 files changed, 4 insertions(+), 1 deletions(-) >> diff --git a/mm/backing-dev.c b/mm/backing-dev.c >> index befc875..d06533c 100644 >> --- a/mm/backing-dev.c >> +++ b/mm/backing-dev.c >> @@ -336,7 +336,10 @@ void bdi_wakeup_thread_delayed(struct backing_dev_info *bdi) >> { >> unsigned long timeout; >> - timeout = msecs_to_jiffies(dirty_writeback_interval * 10); >> + if (dirty_writeback_interval) >> + timeout = msecs_to_jiffies(dirty_writeback_interval * 10); >> + else >> + timeout = msecs_to_jiffies(5000); >> mod_timer(&bdi->wb.wakeup_timer, jiffies + timeout); >> } > >Isn't the problem that the sysctl handler does not have a min/max >valid value set? I.e. to prevent invalid values from being set in >the first place? > >Cheers, > >Dave. 0 is a valid value for dirty_writeback_interval which according to the definition/documentation is disabled when set to 0. In other places, a constraint check is done on that value except here.