diff -urN 2.4.4pre2/kernel/fork.c waitqueue/kernel/fork.c
--- 2.4.4pre2/kernel/fork.c	Thu Apr 12 16:20:56 2001
+++ waitqueue/kernel/fork.c	Thu Apr 12 16:22:06 2001
@@ -38,8 +38,8 @@
 {
 	unsigned long flags;
 
-	wq_write_lock_irqsave(&q->lock, flags);
 	wait->flags &= ~WQ_FLAG_EXCLUSIVE;
+	wq_write_lock_irqsave(&q->lock, flags);
 	__add_wait_queue(q, wait);
 	wq_write_unlock_irqrestore(&q->lock, flags);
 }
@@ -48,8 +48,8 @@
 {
 	unsigned long flags;
 
-	wq_write_lock_irqsave(&q->lock, flags);
 	wait->flags |= WQ_FLAG_EXCLUSIVE;
+	wq_write_lock_irqsave(&q->lock, flags);
 	__add_wait_queue_tail(q, wait);
 	wq_write_unlock_irqrestore(&q->lock, flags);
 }