diff -urN 2.4.17pre6/drivers/block/loop.c loop-deadlock/drivers/block/loop.c --- 2.4.17pre6/drivers/block/loop.c Thu Dec 6 20:07:33 2001 +++ loop-deadlock/drivers/block/loop.c Sun Dec 9 17:07:25 2001 @@ -578,6 +578,8 @@ atomic_inc(&lo->lo_pending); spin_unlock_irq(&lo->lo_lock); + current->flags |= PF_NOIO; + /* * up sem, we are running */ diff -urN 2.4.17pre6/fs/buffer.c loop-deadlock/fs/buffer.c --- 2.4.17pre6/fs/buffer.c Sat Dec 8 12:34:34 2001 +++ loop-deadlock/fs/buffer.c Sun Dec 9 17:07:25 2001 @@ -1045,7 +1045,7 @@ /* First, check for the "real" dirty limit. */ if (dirty > soft_dirty_limit) { - if (dirty > hard_dirty_limit) + if (dirty > hard_dirty_limit && !(current->flags & PF_NOIO)) return 1; return 0; } diff -urN 2.4.17pre6/include/linux/sched.h loop-deadlock/include/linux/sched.h --- 2.4.17pre6/include/linux/sched.h Fri Nov 23 08:21:04 2001 +++ loop-deadlock/include/linux/sched.h Sun Dec 9 17:07:49 2001 @@ -426,6 +426,7 @@ #define PF_MEMALLOC 0x00000800 /* Allocating memory */ #define PF_MEMDIE 0x00001000 /* Killed for out-of-memory */ #define PF_FREE_PAGES 0x00002000 /* per process page freeing */ +#define PF_NOIO 0x00004000 /* avoid generating further I/O */ #define PF_USEDFPU 0x00100000 /* task used FPU this quantum (SMP) */