--- atomicalloc/fs/buffer.c.~1~ Thu Apr 26 02:04:33 2001 +++ atomicalloc/fs/buffer.c Thu Apr 26 03:58:44 2001 @@ -2390,7 +2390,7 @@ spin_unlock(&free_list[index].lock); write_unlock(&hash_table_lock); spin_unlock(&lru_list_lock); - if (wait) { + if (wait && !(current->flags & PF_ATOMICALLOC)) { sync_page_buffers(bh, wait); /* We waited synchronously, so we can free the buffers. */ if (wait > 1 && !loop) { --- atomicalloc/include/linux/sched.h.~1~ Thu Apr 26 02:04:44 2001 +++ atomicalloc/include/linux/sched.h Thu Apr 26 04:05:28 2001 @@ -403,18 +403,15 @@ /* * Per process flags */ -#define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */ - /* Not implemented yet, only for 486*/ -#define PF_STARTING 0x00000002 /* being created */ -#define PF_EXITING 0x00000004 /* getting shut down */ -#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ -#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ -#define PF_DUMPCORE 0x00000200 /* dumped core */ -#define PF_SIGNALED 0x00000400 /* killed by a signal */ -#define PF_MEMALLOC 0x00000800 /* Allocating memory */ -#define PF_VFORK 0x00001000 /* Wake up parent in mm_release */ - -#define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */ +#define PF_EXITING (1UL<<0) /* getting shut down */ +#define PF_FORKNOEXEC (1UL<<1) /* forked but didn't exec */ +#define PF_SUPERPRIV (1UL<<2) /* used super-user privileges */ +#define PF_DUMPCORE (1UL<<3) /* dumped core */ +#define PF_SIGNALED (1UL<<4) /* killed by a signal */ +#define PF_MEMALLOC (1UL<<5) /* Allocating memory */ +#define PF_VFORK (1UL<<6) /* Wake up parent in mm_release */ +#define PF_USEDFPU (1UL<<7) /* task used FPU this quantum (SMP) */ +#define PF_ATOMICALLOC (1UL<<8) /* do not block during memalloc */ /* * Ptrace flags --- atomicalloc/mm/slab.c.~1~ Sun Apr 1 01:17:34 2001 +++ atomicalloc/mm/slab.c Thu Apr 26 03:59:24 2001 @@ -1690,7 +1690,7 @@ unsigned int best_len; unsigned int scan; - if (gfp_mask & __GFP_WAIT) + if (gfp_mask & __GFP_WAIT && !(current->flags & PF_ATOMICALLOC)) down(&cache_chain_sem); else if (down_trylock(&cache_chain_sem)) --- atomicalloc/mm/page_alloc.c.~1~ Thu Apr 26 02:04:45 2001 +++ atomicalloc/mm/page_alloc.c Thu Apr 26 03:59:45 2001 @@ -381,7 +381,7 @@ * able to free some memory we can't free ourselves */ wakeup_kswapd(); - if (gfp_mask & __GFP_WAIT) { + if (gfp_mask & __GFP_WAIT && !(current->flags & PF_ATOMICALLOC)) { __set_current_state(TASK_RUNNING); current->policy |= SCHED_YIELD; schedule();