|
@@ -553,6 +553,7 @@ static void background_writeout(unsigned long _min_pages)
|
|
|
global_page_state(NR_UNSTABLE_NFS) < background_thresh
|
|
|
&& min_pages <= 0)
|
|
|
break;
|
|
|
+ wbc.more_io = 0;
|
|
|
wbc.encountered_congestion = 0;
|
|
|
wbc.nr_to_write = MAX_WRITEBACK_PAGES;
|
|
|
wbc.pages_skipped = 0;
|
|
@@ -560,8 +561,9 @@ static void background_writeout(unsigned long _min_pages)
|
|
|
min_pages -= MAX_WRITEBACK_PAGES - wbc.nr_to_write;
|
|
|
if (wbc.nr_to_write > 0 || wbc.pages_skipped > 0) {
|
|
|
/* Wrote less than expected */
|
|
|
- congestion_wait(WRITE, HZ/10);
|
|
|
- if (!wbc.encountered_congestion)
|
|
|
+ if (wbc.encountered_congestion || wbc.more_io)
|
|
|
+ congestion_wait(WRITE, HZ/10);
|
|
|
+ else
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -626,11 +628,12 @@ static void wb_kupdate(unsigned long arg)
|
|
|
global_page_state(NR_UNSTABLE_NFS) +
|
|
|
(inodes_stat.nr_inodes - inodes_stat.nr_unused);
|
|
|
while (nr_to_write > 0) {
|
|
|
+ wbc.more_io = 0;
|
|
|
wbc.encountered_congestion = 0;
|
|
|
wbc.nr_to_write = MAX_WRITEBACK_PAGES;
|
|
|
writeback_inodes(&wbc);
|
|
|
if (wbc.nr_to_write > 0) {
|
|
|
- if (wbc.encountered_congestion)
|
|
|
+ if (wbc.encountered_congestion || wbc.more_io)
|
|
|
congestion_wait(WRITE, HZ/10);
|
|
|
else
|
|
|
break; /* All the old data is written */
|