|
@@ -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;
|
|
|
}
|