kernel/sysctl.c | 2 -- mm/page-writeback.c | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/kernel/sysctl.c b/kernel/sysctl.c index b2f06f3c6a3f..411da56cd732 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1406,7 +1406,6 @@ static struct ctl_table vm_table[] = { .extra1 = &zero, }, #endif -#ifdef CONFIG_HIGHMEM { .procname = "highmem_is_dirtyable", .data = &vm_highmem_is_dirtyable, @@ -1416,7 +1415,6 @@ static struct ctl_table vm_table[] = { .extra1 = &zero, .extra2 = &one, }, -#endif { .procname = "scan_unevictable_pages", .data = &scan_unevictable_pages, diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 63807583d8e8..b3bce1cd59d5 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -241,8 +241,13 @@ static unsigned long global_dirtyable_memory(void) x = global_page_state(NR_FREE_PAGES) + global_reclaimable_pages(); x -= min(x, dirty_balance_reserve); - if (!vm_highmem_is_dirtyable) + if (!vm_highmem_is_dirtyable) { + const unsigned long GB_pages = 1024*1024*1024 / PAGE_SIZE; + x -= highmem_dirtyable_memory(x); + if (x > GB_pages) + x = GB_pages; + } return x + 1; /* Ensure that we never return 0 */ }