Index: linux-2.6.19-rc5-mm2/mm/page-writeback.c =================================================================== --- linux-2.6.19-rc5-mm2.orig/mm/page-writeback.c 2006-11-15 16:48:13.000000000 -0600 +++ linux-2.6.19-rc5-mm2/mm/page-writeback.c 2006-11-15 22:03:30.840066271 -0600 @@ -74,6 +74,11 @@ int dirty_background_ratio = 10; int vm_dirty_ratio = 40; /* + * The generator of dirty data starts writeback at this percentage + */ +int vm_per_node_dirty_ratio = 60; + +/* * The interval between `kupdate'-style writebacks, in jiffies */ int dirty_writeback_interval = 5 * HZ; @@ -119,7 +124,7 @@ static void background_writeout(unsigned * clamping level. */ static void -get_dirty_limits(long *pbackground, long *pdirty, +get_dirty_limits(long *pbackground, long *pdirty, long *pndirty, struct address_space *mapping) { int background_ratio; /* Percentages */ @@ -127,6 +132,7 @@ get_dirty_limits(long *pbackground, long int unmapped_ratio; long background; long dirty; + long node_dirty; unsigned long available_memory = vm_total_pages; struct task_struct *tsk; @@ -157,13 +163,16 @@ get_dirty_limits(long *pbackground, long background = (background_ratio * available_memory) / 100; dirty = (dirty_ratio * available_memory) / 100; + node_dirty = vm_node_dirty_ratio * LOCAL_DATA(node_pages() / 100; tsk = current; if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { background += background / 4; dirty += dirty / 4; + node_dirty += node_dirty / 4; } *pbackground = background; *pdirty = dirty; + *pndirty = node_dirty; } /*