]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/two_state_shared_lock.c
New upstream release
[bcachefs-tools-debian] / libbcachefs / two_state_shared_lock.c
index dc508d545de0577fbae077355c842f923db2c950..9764c2e6a9102658c2bc8181d82790070c2001a9 100644 (file)
@@ -2,32 +2,7 @@
 
 #include "two_state_shared_lock.h"
 
-void bch2_two_state_unlock(two_state_lock_t *lock, int s)
+void __bch2_two_state_lock(two_state_lock_t *lock, int s)
 {
-       long i = s ? 1 : -1;
-
-       BUG_ON(atomic_long_read(&lock->v) == 0);
-
-       if (atomic_long_sub_return_release(i, &lock->v) == 0)
-               wake_up_all(&lock->wait);
-}
-
-bool bch2_two_state_trylock(two_state_lock_t *lock, int s)
-{
-       long i = s ? 1 : -1;
-       long v = atomic_long_read(&lock->v), old;
-
-       do {
-               old = v;
-
-               if (i > 0 ? v < 0 : v > 0)
-                       return false;
-       } while ((v = atomic_long_cmpxchg_acquire(&lock->v,
-                                       old, old + i)) != old);
-       return true;
-}
-
-void bch2_two_state_lock(two_state_lock_t *lock, int s)
-{
-       wait_event(lock->wait, bch2_two_state_trylock(lock, s));
+       __wait_event(lock->wait, bch2_two_state_trylock(lock, s));
 }