]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Revert "bcachefs: Fix bch2_btree_node_upgrade()"
authorAlan Huang <mmpgouride@gmail.com>
Wed, 25 Sep 2024 16:46:02 +0000 (00:46 +0800)
committerKent Overstreet <kent.overstreet@linux.dev>
Tue, 14 Jan 2025 15:45:08 +0000 (10:45 -0500)
This reverts commit 62448afee714354a26db8a0f3c644f58628f0792.

six_lock_tryupgrade fails only if there is an intent lock held,
it won't fail no matter how many read locks are held.

Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_locking.c

index 8503931463d1f53f5223e31dcc2ef787e83f8345..c1a0f8f78eb42ae88ff4b19cbacd27f241a81b00 100644 (file)
@@ -512,7 +512,6 @@ bool bch2_btree_node_upgrade(struct btree_trans *trans,
                             struct btree_path *path, unsigned level)
 {
        struct btree *b = path->l[level].b;
-       struct six_lock_count count = bch2_btree_node_lock_counts(trans, path, &b->c, level);
 
        if (!is_btree_node(path, level))
                return false;
@@ -536,24 +535,11 @@ bool bch2_btree_node_upgrade(struct btree_trans *trans,
        if (race_fault())
                return false;
 
-       if (btree_node_locked(path, level)) {
-               bool ret;
-
-               six_lock_readers_add(&b->c.lock, -count.n[SIX_LOCK_read]);
-               ret = six_lock_tryupgrade(&b->c.lock);
-               six_lock_readers_add(&b->c.lock, count.n[SIX_LOCK_read]);
-
-               if (ret)
-                       goto success;
-       } else {
-               if (six_relock_type(&b->c.lock, SIX_LOCK_intent, path->l[level].lock_seq))
-                       goto success;
-       }
+       if (btree_node_locked(path, level)
+           ? six_lock_tryupgrade(&b->c.lock)
+           : six_relock_type(&b->c.lock, SIX_LOCK_intent, path->l[level].lock_seq))
+               goto success;
 
-       /*
-        * Do we already have an intent lock via another path? If so, just bump
-        * lock count:
-        */
        if (btree_node_lock_seq_matches(path, b, level) &&
            btree_node_lock_increment(trans, &b->c, level, BTREE_NODE_INTENT_LOCKED)) {
                btree_node_unlock(trans, path, level);