From: Jamie Lokier <jamie@shareable.org>

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);

_