six locks: Remove hacks for percpu mode lost wakeup
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 21 May 2023 20:38:09 +0000 (16:38 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:10:01 +0000 (17:10 -0400)
The lost wakeup bug hasn't been observed in awhile, and we're trying to
provoke it and determine if it still exists.

This patch removes some defenses that were added to attempt to track it
down; if it still exists, this should make it easier to see it.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/six.c

index f75387b9da88ea301d7d517058ab11cc4657d7cf..32ad545ba570cd7e32598d89aba6d585f77758f5 100644 (file)
@@ -144,17 +144,8 @@ static int __do_six_trylock_type(struct six_lock *lock,
                 * lock, issue a wakeup because we might have caused a
                 * spurious trylock failure:
                 */
-#if 0
-               /*
-                * This code should be sufficient, but we're seeing unexplained
-                * lost wakeups:
-                */
                if (old.write_locking)
                        ret = -1 - SIX_LOCK_write;
-#else
-               if (!ret)
-                       ret = -1 - SIX_LOCK_write;
-#endif
        } else if (type == SIX_LOCK_write && lock->readers) {
                if (try) {
                        atomic64_add(__SIX_VAL(write_locking, 1),
@@ -332,7 +323,7 @@ static bool __six_relock_type(struct six_lock *lock, enum six_lock_type type,
                 */
                if (ret)
                        six_acquire(&lock->dep_map, 1, type == SIX_LOCK_read, ip);
-               else
+               else if (old.write_locking)
                        six_lock_wakeup(lock, old, SIX_LOCK_write);
 
                return ret;