--- /tmp/linux-2.2.10/mm/page_alloc.c Tue Jul 13 00:33:10 1999 +++ linux-2.2.10/mm/page_alloc.c Sat Jul 17 12:16:33 1999 @@ -189,8 +189,6 @@ atomic_set(&map->count, 1); \ } while (0) -int low_on_memory = 0; - unsigned long __get_free_pages(int gfp_mask, unsigned long order) { unsigned long flags; @@ -218,15 +216,16 @@ int freed; if (nr_free_pages > freepages.min) { - if (!low_on_memory) + if (!current->trashing_mem) goto ok_to_allocate; - if (nr_free_pages >= freepages.high) { - low_on_memory = 0; + if (nr_free_pages > freepages.high) { + current->trashing_mem = 0; goto ok_to_allocate; } } - low_on_memory = 1; + if (!current->trashing_mem) + current->trashing_mem = 1; current->flags |= PF_MEMALLOC; freed = try_to_free_pages(gfp_mask); current->flags &= ~PF_MEMALLOC; --- /tmp/linux-2.2.10/include/linux/sched.h Tue Jul 13 00:33:10 1999 +++ linux-2.2.10/include/linux/sched.h Sat Jul 17 12:17:01 1999 @@ -279,6 +279,7 @@ /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */ unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap; int swappable:1; + int trashing_mem:1; /* process credentials */ uid_t uid,euid,suid,fsuid; gid_t gid,egid,sgid,fsgid; @@ -362,7 +363,7 @@ /* utime */ {0,0,0,0},0, \ /* per CPU times */ {0, }, {0, }, \ /* flt */ 0,0,0,0,0,0, \ -/* swp */ 0, \ +/* swp */ 0,0, \ /* process credentials */ \ /* uid etc */ 0,0,0,0,0,0,0,0, \ /* suppl grps*/ 0, {0,}, \