diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2015-12-19 15:07:41 -0500 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2015-12-20 06:43:25 -0500 |
commit | 885c2cb770b5ac2507c41bc9f91a5d1c98337bee (patch) | |
tree | 6eaf03ba2bd17e79879de52db0d034bf9547d0ab /kernel/futex.c | |
parent | 4959f2de11ca532a120a337429e5576fd283700f (diff) |
futex: Cleanup the goto confusion in requeue_pi()
out_unlock: does not only drop the locks, it also drops the refcount
on the pi_state. Really intuitive.
Move the label after the put_pi_state() call and use 'break' in the
error handling path of the requeue loop.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Darren Hart <darren@dvhart.com>
Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Bhuvanesh_Surachari@mentor.com
Cc: Andy Lowe <Andy_Lowe@mentor.com>
Link: http://lkml.kernel.org/r/20151219200607.526665141@linutronix.de
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/futex.c')
-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); |