Commit 75f7ad8e authored by Paul Szabo's avatar Paul Szabo Committed by Linus Torvalds

page-writeback.c: subtract min_free_kbytes from dirtyable memory

When calculating amount of dirtyable memory, min_free_kbytes should be
subtracted because it is not intended for dirty pages.

Addresses http://bugs.debian.org/695182

[akpm@linux-foundation.org: fix up min_free_kbytes extern declarations]
[akpm@linux-foundation.org: fix min() warning]
Signed-off-by: default avatarPaul Szabo <psz@maths.usyd.edu.au>
Acked-by: default avatarRik van Riel <riel@redhat.com>
Cc: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 08b52706
...@@ -1393,6 +1393,9 @@ extern void setup_per_cpu_pageset(void); ...@@ -1393,6 +1393,9 @@ extern void setup_per_cpu_pageset(void);
extern void zone_pcp_update(struct zone *zone); extern void zone_pcp_update(struct zone *zone);
extern void zone_pcp_reset(struct zone *zone); extern void zone_pcp_reset(struct zone *zone);
/* page_alloc.c */
extern int min_free_kbytes;
/* nommu.c */ /* nommu.c */
extern atomic_long_t mmap_pages_allocated; extern atomic_long_t mmap_pages_allocated;
extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t); extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t);
......
...@@ -105,7 +105,6 @@ extern char core_pattern[]; ...@@ -105,7 +105,6 @@ extern char core_pattern[];
extern unsigned int core_pipe_limit; extern unsigned int core_pipe_limit;
#endif #endif
extern int pid_max; extern int pid_max;
extern int min_free_kbytes;
extern int pid_max_min, pid_max_max; extern int pid_max_min, pid_max_max;
extern int sysctl_drop_caches; extern int sysctl_drop_caches;
extern int percpu_pagelist_fraction; extern int percpu_pagelist_fraction;
......
...@@ -105,7 +105,6 @@ static int set_recommended_min_free_kbytes(void) ...@@ -105,7 +105,6 @@ static int set_recommended_min_free_kbytes(void)
struct zone *zone; struct zone *zone;
int nr_zones = 0; int nr_zones = 0;
unsigned long recommended_min; unsigned long recommended_min;
extern int min_free_kbytes;
if (!khugepaged_enabled()) if (!khugepaged_enabled())
return 0; return 0;
......
...@@ -241,6 +241,9 @@ static unsigned long global_dirtyable_memory(void) ...@@ -241,6 +241,9 @@ static unsigned long global_dirtyable_memory(void)
if (!vm_highmem_is_dirtyable) if (!vm_highmem_is_dirtyable)
x -= highmem_dirtyable_memory(x); x -= highmem_dirtyable_memory(x);
/* Subtract min_free_kbytes */
x -= min_t(unsigned long, x, min_free_kbytes >> (PAGE_SHIFT - 10));
return x + 1; /* Ensure that we never return 0 */ return x + 1; /* Ensure that we never return 0 */
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment