diff options
-rw-r--r-- | kernel/futex.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index dcec01856cf3..461d438f4816 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -1839,20 +1839,25 @@ retry_private: | |||
1839 | */ | 1839 | */ |
1840 | this->pi_state = NULL; | 1840 | this->pi_state = NULL; |
1841 | put_pi_state(pi_state); | 1841 | put_pi_state(pi_state); |
1842 | goto out_unlock; | 1842 | /* |
1843 | * We stop queueing more waiters and let user | ||
1844 | * space deal with the mess. | ||
1845 | */ | ||
1846 | break; | ||
1843 | } | 1847 | } |
1844 | } | 1848 | } |
1845 | requeue_futex(this, hb1, hb2, &key2); | 1849 | requeue_futex(this, hb1, hb2, &key2); |
1846 | drop_count++; | 1850 | drop_count++; |
1847 | } | 1851 | } |
1848 | 1852 | ||
1849 | out_unlock: | ||
1850 | /* | 1853 | /* |
1851 | * We took an extra initial reference to the pi_state either | 1854 | * We took an extra initial reference to the pi_state either |
1852 | * in futex_proxy_trylock_atomic() or in lookup_pi_state(). We | 1855 | * in futex_proxy_trylock_atomic() or in lookup_pi_state(). We |
1853 | * need to drop it here again. | 1856 | * need to drop it here again. |
1854 | */ | 1857 | */ |
1855 | put_pi_state(pi_state); | 1858 | put_pi_state(pi_state); |
1859 | |||
1860 | out_unlock: | ||
1856 | double_unlock_hb(hb1, hb2); | 1861 | double_unlock_hb(hb1, hb2); |
1857 | wake_up_q(&wake_q); | 1862 | wake_up_q(&wake_q); |
1858 | hb_waiters_dec(hb2); | 1863 | hb_waiters_dec(hb2); |