From: Jamie Lokier One of the tests in unqueue_me() is redundant. If we acquire the spinlock, the futex must be queued. --- kernel/futex.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff -puN kernel/futex.c~futex-redundant-test kernel/futex.c --- 25/kernel/futex.c~futex-redundant-test 2004-01-24 20:28:05.000000000 -0800 +++ 25-akpm/kernel/futex.c 2004-01-24 20:28:05.000000000 -0800 @@ -430,11 +430,10 @@ static int unqueue_me(struct futex_q *q) spin_unlock(lock_ptr); goto retry; } - if (likely(!list_empty(&q->list))) { - list_del(&q->list); - ret = 1; - } + WARN_ON(list_empty(&q->list)); + list_del(&q->list); spin_unlock(lock_ptr); + ret = 1; } drop_key_refs(&q->key); _