In the slowpath of down for write, we bail out in case of signal received and try to wake up any pending waiter but it makes no sense to wake up a write waiter given any lock holder, either write or read. The RFC is do nothing for wwaiter if any lock holder present - they will fill their duty at lock release time. Only for thoughts now. Hillf --- x/kernel/locking/rwsem.c +++ y/kernel/locking/rwsem.c @@ -418,6 +418,8 @@ static void rwsem_mark_wake(struct rw_se waiter = rwsem_first_waiter(sem); if (waiter->type == RWSEM_WAITING_FOR_WRITE) { + if (RWSEM_LOCK_MASK & atomic_long_read(&sem->count)) + return; if (wake_type == RWSEM_WAKE_ANY) { /* * Mark writer at the front of the queue for wakeup. --