Re: 2.6.35-rc3 deadlocks on semaphore operations

From: Manfred Spraul
Date: Wed Jun 23 2010 - 12:28:59 EST


This is a multi-part message in MIME format.Hi,

I think I found it:
Previously, queue.status was never IN_WAKEUP when the semaphore spinlock was held.

The last patch changes that:
Now the change from IN_WAKEUP to the final result code happens after the the semaphore spinlock is dropped.
Thus a task can observe IN_WAKEUP even when it acquired the semaphore spinlock.

As a result, semop() sometimes returned 1 (IN_WAKEUP) for a successful operation.

Attached is a patch that should fix the bug.

--
Manfred