for (;;) {
struct thread_info *owner;
+ /*
+ * If we own the BKL, then don't spin. The owner of
+ * the mutex might be waiting on us to release the BKL.
+ */
+ if (unlikely(current->lock_depth >= 0))
+ break;
+
/*
* If there's an owner, wait for it to either
* release the lock or go to sleep.