Index: linux-2.4.21/kernel/sched.c =================================================================== --- linux-2.4.21.orig/kernel/sched.c 2004-06-09 14:51:10.000000000 -0700 +++ linux-2.4.21/kernel/sched.c 2004-06-09 14:56:03.000000000 -0700 @@ -1509,10 +1509,10 @@ struct filtered_wait_queue *wait, *save; spin_lock_irqsave(&q->lock, flags); list_for_each_entry_safe(wait, save, &q->task_list, wait.task_list) { - if (wait->key != key) - continue; - else if (wait->wait.func) + if (wait->wait.func) wait->wait.func(&wait->wait); + else if (wait->key != key) + continue; else if (wait->wait.task->state & mode) try_to_wake_up(wait->wait.task, mode, 0, 0); }