|
@@ -658,14 +658,21 @@ long writeback_inodes_wb(struct bdi_writeback *wb, long nr_pages)
|
|
|
return nr_pages - work.nr_pages;
|
|
|
}
|
|
|
|
|
|
-static inline bool over_bground_thresh(void)
|
|
|
+static bool over_bground_thresh(struct backing_dev_info *bdi)
|
|
|
{
|
|
|
unsigned long background_thresh, dirty_thresh;
|
|
|
|
|
|
global_dirty_limits(&background_thresh, &dirty_thresh);
|
|
|
|
|
|
- return (global_page_state(NR_FILE_DIRTY) +
|
|
|
- global_page_state(NR_UNSTABLE_NFS) > background_thresh);
|
|
|
+ if (global_page_state(NR_FILE_DIRTY) +
|
|
|
+ global_page_state(NR_UNSTABLE_NFS) > background_thresh)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ if (bdi_stat(bdi, BDI_RECLAIMABLE) >
|
|
|
+ bdi_dirty_limit(bdi, background_thresh))
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -727,7 +734,7 @@ static long wb_writeback(struct bdi_writeback *wb,
|
|
|
* For background writeout, stop when we are below the
|
|
|
* background dirty threshold
|
|
|
*/
|
|
|
- if (work->for_background && !over_bground_thresh())
|
|
|
+ if (work->for_background && !over_bground_thresh(wb->bdi))
|
|
|
break;
|
|
|
|
|
|
if (work->for_kupdate) {
|
|
@@ -811,7 +818,7 @@ static unsigned long get_nr_dirty_pages(void)
|
|
|
|
|
|
static long wb_check_background_flush(struct bdi_writeback *wb)
|
|
|
{
|
|
|
- if (over_bground_thresh()) {
|
|
|
+ if (over_bground_thresh(wb->bdi)) {
|
|
|
|
|
|
struct wb_writeback_work work = {
|
|
|
.nr_pages = LONG_MAX,
|