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);

_