diff options
-rw-r--r-- | kernel/futex.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index 67dacaf93e56..6801b3751a95 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -1452,6 +1452,7 @@ retry: | |||
1452 | hb2 = hash_futex(&key2); | 1452 | hb2 = hash_futex(&key2); |
1453 | 1453 | ||
1454 | retry_private: | 1454 | retry_private: |
1455 | hb_waiters_inc(hb2); | ||
1455 | double_lock_hb(hb1, hb2); | 1456 | double_lock_hb(hb1, hb2); |
1456 | 1457 | ||
1457 | if (likely(cmpval != NULL)) { | 1458 | if (likely(cmpval != NULL)) { |
@@ -1461,6 +1462,7 @@ retry_private: | |||
1461 | 1462 | ||
1462 | if (unlikely(ret)) { | 1463 | if (unlikely(ret)) { |
1463 | double_unlock_hb(hb1, hb2); | 1464 | double_unlock_hb(hb1, hb2); |
1465 | hb_waiters_dec(hb2); | ||
1464 | 1466 | ||
1465 | ret = get_user(curval, uaddr1); | 1467 | ret = get_user(curval, uaddr1); |
1466 | if (ret) | 1468 | if (ret) |
@@ -1510,6 +1512,7 @@ retry_private: | |||
1510 | break; | 1512 | break; |
1511 | case -EFAULT: | 1513 | case -EFAULT: |
1512 | double_unlock_hb(hb1, hb2); | 1514 | double_unlock_hb(hb1, hb2); |
1515 | hb_waiters_dec(hb2); | ||
1513 | put_futex_key(&key2); | 1516 | put_futex_key(&key2); |
1514 | put_futex_key(&key1); | 1517 | put_futex_key(&key1); |
1515 | ret = fault_in_user_writeable(uaddr2); | 1518 | ret = fault_in_user_writeable(uaddr2); |
@@ -1519,6 +1522,7 @@ retry_private: | |||
1519 | case -EAGAIN: | 1522 | case -EAGAIN: |
1520 | /* The owner was exiting, try again. */ | 1523 | /* The owner was exiting, try again. */ |
1521 | double_unlock_hb(hb1, hb2); | 1524 | double_unlock_hb(hb1, hb2); |
1525 | hb_waiters_dec(hb2); | ||
1522 | put_futex_key(&key2); | 1526 | put_futex_key(&key2); |
1523 | put_futex_key(&key1); | 1527 | put_futex_key(&key1); |
1524 | cond_resched(); | 1528 | cond_resched(); |
@@ -1594,6 +1598,7 @@ retry_private: | |||
1594 | 1598 | ||
1595 | out_unlock: | 1599 | out_unlock: |
1596 | double_unlock_hb(hb1, hb2); | 1600 | double_unlock_hb(hb1, hb2); |
1601 | hb_waiters_dec(hb2); | ||
1597 | 1602 | ||
1598 | /* | 1603 | /* |
1599 | * drop_futex_key_refs() must be called outside the spinlocks. During | 1604 | * drop_futex_key_refs() must be called outside the spinlocks. During |