include/linux/writeback.h | 1 - mm/page-writeback.c | 8 +++++--- mm/page_alloc.c | 2 ++ 3 files changed, 7 insertions(+), 4 deletions(-) diff -puN mm/page_alloc.c~rt-tasks-special-vm-treatment-2 mm/page_alloc.c --- 25/mm/page_alloc.c~rt-tasks-special-vm-treatment-2 2003-08-07 15:41:40.000000000 -0700 +++ 25-akpm/mm/page_alloc.c 2003-08-07 15:41:40.000000000 -0700 @@ -593,6 +593,8 @@ __alloc_pages(unsigned int gfp_mask, uns local_min = z->pages_min; if (gfp_mask & __GFP_HIGH) local_min >>= 2; + if (rt_task(p)) + local_min >>= 1; min += local_min; if (z->free_pages >= min || (!wait && z->free_pages >= z->pages_high)) { diff -puN mm/page-writeback.c~rt-tasks-special-vm-treatment-2 mm/page-writeback.c --- 25/mm/page-writeback.c~rt-tasks-special-vm-treatment-2 2003-08-07 15:41:40.000000000 -0700 +++ 25-akpm/mm/page-writeback.c 2003-08-07 15:41:40.000000000 -0700 @@ -111,6 +111,7 @@ get_dirty_limits(struct page_state *ps, int unmapped_ratio; long background; long dirty; + struct task_struct *tsk; get_page_state(ps); @@ -129,7 +130,8 @@ get_dirty_limits(struct page_state *ps, background = (background_ratio * total_pages) / 100; dirty = (dirty_ratio * total_pages) / 100; - if (current->flags & PF_LESS_THROTTLE) { + tsk = current; + if (tsk->flags & PF_LESS_THROTTLE || rt_task(tsk)) { background += background / 4; dirty += dirty / 4; } @@ -144,7 +146,7 @@ get_dirty_limits(struct page_state *ps, * If we're over `background_thresh' then pdflush is woken to perform some * writeout. */ -void balance_dirty_pages(struct address_space *mapping) +static void balance_dirty_pages(struct address_space *mapping) { struct page_state ps; long nr_reclaimable; @@ -223,7 +225,7 @@ void balance_dirty_pages_ratelimited(str * Check the rate limiting. Also, we do not want to throttle real-time * tasks in balance_dirty_pages(). Period. */ - if (get_cpu_var(ratelimits)++ >= ratelimit && !rt_task(current)) { + if (get_cpu_var(ratelimits)++ >= ratelimit) { __get_cpu_var(ratelimits) = 0; put_cpu_var(ratelimits); balance_dirty_pages(mapping); diff -puN include/linux/writeback.h~rt-tasks-special-vm-treatment-2 include/linux/writeback.h --- 25/include/linux/writeback.h~rt-tasks-special-vm-treatment-2 2003-08-07 15:41:40.000000000 -0700 +++ 25-akpm/include/linux/writeback.h 2003-08-07 15:41:40.000000000 -0700 @@ -84,7 +84,6 @@ int dirty_writeback_centisecs_handler(st void *, size_t *); void page_writeback_init(void); -void balance_dirty_pages(struct address_space *mapping); void balance_dirty_pages_ratelimited(struct address_space *mapping); int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0); int do_writepages(struct address_space *mapping, struct writeback_control *wbc); _