diff -urN linux.orig/include/linux/sched.h linux.diff/include/linux/sched.h
--- linux.orig/include/linux/sched.h	Fri Jan 11 15:29:58 2002
+++ linux.diff/include/linux/sched.h	Fri Jan 11 19:18:40 2002
@@ -779,6 +779,7 @@
 
 extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
 extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
+extern void FASTCALL(add_wait_queue_exclusive_lifo(wait_queue_head_t *q, wait_queue_t * wait));
 extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
 
 #define __wait_event(wq, condition) 					\
diff -urN linux.orig/kernel/fork.c linux.diff/kernel/fork.c
--- linux.orig/kernel/fork.c	Fri Jan 11 15:29:58 2002
+++ linux.diff/kernel/fork.c	Fri Jan 11 19:18:40 2002
@@ -46,6 +46,16 @@
 	wq_write_unlock_irqrestore(&q->lock, flags);
 }
 
+void add_wait_queue_exclusive_lifo(wait_queue_head_t *q, wait_queue_t * wait)
+{
+	unsigned long flags;
+
+	wq_write_lock_irqsave(&q->lock, flags);
+	wait->flags = WQ_FLAG_EXCLUSIVE;
+	__add_wait_queue(q, wait);
+	wq_write_unlock_irqrestore(&q->lock, flags);
+}
+
 void add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait)
 {
 	unsigned long flags;