@@ -55,6 +55,9 @@ struct bdi_writeback {
unsigned long last_old_flush; /* last old data flush */
struct delayed_work dwork; /* work item used for writeback */
+
+ unsigned long dirty_sleep; /* last wait */
+
struct list_head b_dirty; /* dirty inodes */
struct list_head b_io; /* parked for writeback */
struct list_head b_more_io; /* parked for more writeback */
@@ -439,7 +439,8 @@ static void bdi_wb_init(struct bdi_writeback *wb, struct backing_dev_info *bdi)
memset(wb, 0, sizeof(*wb));
wb->bdi = bdi;
- wb->last_old_flush = jiffies;
+ wb->dirty_sleep = wb->last_old_flush = jiffies;
+
INIT_LIST_HEAD(&wb->b_dirty);
INIT_LIST_HEAD(&wb->b_io);
INIT_LIST_HEAD(&wb->b_more_io);
@@ -1518,6 +1518,7 @@ static void balance_dirty_pages(struct address_space *mapping,
unsigned long dirty_ratelimit;
unsigned long pos_ratio;
struct backing_dev_info *bdi = mapping->backing_dev_info;
+ struct bdi_writeback *wb = &bdi->wb;
bool strictlimit = bdi->capabilities & BDI_CAP_STRICTLIMIT;
unsigned long start_time = jiffies;
@@ -1656,6 +1657,7 @@ static void balance_dirty_pages(struct address_space *mapping,
pause,
start_time);
__set_current_state(TASK_KILLABLE);
+ wb->dirty_sleep = now;
io_schedule_timeout(pause);
current->dirty_paused_when = now + pause;