diff options
Diffstat (limited to 'mm/backing-dev.c')
| -rw-r--r-- | mm/backing-dev.c | 15 | 
1 files changed, 10 insertions, 5 deletions
diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 707d0dc6da0..660a87a2251 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -48,7 +48,6 @@ static struct timer_list sync_supers_timer;  static int bdi_sync_supers(void *);  static void sync_supers_timer_fn(unsigned long); -static void arm_supers_timer(void);  static void bdi_add_default_flusher_task(struct backing_dev_info *bdi); @@ -252,7 +251,7 @@ static int __init default_bdi_init(void)  	init_timer(&sync_supers_timer);  	setup_timer(&sync_supers_timer, sync_supers_timer_fn, 0); -	arm_supers_timer(); +	bdi_arm_supers_timer();  	err = bdi_init(&default_backing_dev_info);  	if (!err) @@ -374,10 +373,13 @@ static int bdi_sync_supers(void *unused)  	return 0;  } -static void arm_supers_timer(void) +void bdi_arm_supers_timer(void)  {  	unsigned long next; +	if (!dirty_writeback_interval) +		return; +  	next = msecs_to_jiffies(dirty_writeback_interval * 10) + jiffies;  	mod_timer(&sync_supers_timer, round_jiffies_up(next));  } @@ -385,7 +387,7 @@ static void arm_supers_timer(void)  static void sync_supers_timer_fn(unsigned long unused)  {  	wake_up_process(sync_supers_tsk); -	arm_supers_timer(); +	bdi_arm_supers_timer();  }  static int bdi_forker_task(void *ptr) @@ -428,7 +430,10 @@ static int bdi_forker_task(void *ptr)  			spin_unlock_bh(&bdi_lock);  			wait = msecs_to_jiffies(dirty_writeback_interval * 10); -			schedule_timeout(wait); +			if (wait) +				schedule_timeout(wait); +			else +				schedule();  			try_to_freeze();  			continue;  		}  |