six locks: Simplify six_lock_counts()
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 15 Feb 2023 23:29:16 +0000 (18:29 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:53 +0000 (17:09 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/six.c

index 5d003e41ae43ffb1a9a7fa6a43ebc92ab52c0479..e1e9df0368b6c66f4130f21df55bf517c453a053 100644 (file)
@@ -830,19 +830,12 @@ struct six_lock_count six_lock_counts(struct six_lock *lock)
 {
        struct six_lock_count ret;
 
-       ret.n[SIX_LOCK_read]    = 0;
+       ret.n[SIX_LOCK_read]    = !lock->readers
+               ? lock->state.read_lock
+               : pcpu_read_count(lock);
        ret.n[SIX_LOCK_intent]  = lock->state.intent_lock + lock->intent_lock_recurse;
        ret.n[SIX_LOCK_write]   = lock->state.seq & 1;
 
-       if (!lock->readers)
-               ret.n[SIX_LOCK_read] += lock->state.read_lock;
-       else {
-               int cpu;
-
-               for_each_possible_cpu(cpu)
-                       ret.n[SIX_LOCK_read] += *per_cpu_ptr(lock->readers, cpu);
-       }
-
        return ret;
 }
 EXPORT_SYMBOL_GPL(six_lock_counts);