bcachefs: make struct btree_iter a bit smaller
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 5 Aug 2018 18:41:29 +0000 (14:41 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:09 +0000 (17:08 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_iter.c
fs/bcachefs/btree_iter.h
fs/bcachefs/btree_locking.h
fs/bcachefs/btree_types.h

index 9d92826181dca995c503db01f538f5d7ebef9f11..ae19ba125a71cd34d962ee100a04adef2e778803 100644 (file)
@@ -35,10 +35,10 @@ void bch2_btree_node_unlock_write(struct btree *b, struct btree_iter *iter)
        struct btree_iter *linked;
 
        EBUG_ON(iter->l[b->level].b != b);
-       EBUG_ON(iter->lock_seq[b->level] + 1 != b->lock.state.seq);
+       EBUG_ON(iter->l[b->level].lock_seq + 1 != b->lock.state.seq);
 
        for_each_btree_iter_with_node(iter, b, linked)
-               linked->lock_seq[b->level] += 2;
+               linked->l[b->level].lock_seq += 2;
 
        six_unlock_write(&b->lock);
 }
@@ -80,8 +80,8 @@ bool __bch2_btree_node_relock(struct btree_iter *iter, unsigned level)
        if (race_fault())
                return false;
 
-       if (!six_relock_type(&b->lock, want, iter->lock_seq[level]) &&
-           !(iter->lock_seq[level] >> 1 == b->lock.state.seq >> 1 &&
+       if (!six_relock_type(&b->lock, want, iter->l[level].lock_seq) &&
+           !(iter->l[level].lock_seq >> 1 == b->lock.state.seq >> 1 &&
              btree_node_lock_increment(iter, b, level, want)))
                return false;
 
@@ -106,10 +106,10 @@ static bool bch2_btree_node_upgrade(struct btree_iter *iter, unsigned level)
 
        if (btree_node_locked(iter, level)
            ? six_lock_tryupgrade(&b->lock)
-           : six_relock_type(&b->lock, SIX_LOCK_intent, iter->lock_seq[level]))
+           : six_relock_type(&b->lock, SIX_LOCK_intent, iter->l[level].lock_seq))
                goto success;
 
-       if (iter->lock_seq[level] >> 1 == b->lock.state.seq >> 1 &&
+       if (iter->l[level].lock_seq >> 1 == b->lock.state.seq >> 1 &&
            btree_node_lock_increment(iter, b, level, BTREE_NODE_INTENT_LOCKED)) {
                btree_node_unlock(iter, level);
                goto success;
@@ -692,7 +692,7 @@ static inline void btree_iter_node_set(struct btree_iter *iter,
        EBUG_ON(!btree_iter_pos_in_node(iter, b));
        EBUG_ON(b->lock.state.seq & 1);
 
-       iter->lock_seq[b->level] = b->lock.state.seq;
+       iter->l[b->level].lock_seq = b->lock.state.seq;
        iter->l[b->level].b = b;
        __btree_iter_init(iter, b);
 }
index 315cba28f6b2b6e6b6ab3bf40940d1c44153ab67..1667ba448a18784415f07ad25743bd60bcebd44e 100644 (file)
@@ -39,7 +39,7 @@ static inline bool __iter_has_node(const struct btree_iter *iter,
         */
 
        return iter->l[b->level].b == b &&
-               iter->lock_seq[b->level] >> 1 == b->lock.state.seq >> 1;
+               iter->l[b->level].lock_seq >> 1 == b->lock.state.seq >> 1;
 }
 
 static inline struct btree_iter *
index f262e44314147d92ca25743fd8ca682385035e77..c1d16411154ebdcfaa0500e294099539c47615db 100644 (file)
@@ -206,7 +206,7 @@ void __bch2_btree_node_lock_write(struct btree *, struct btree_iter *);
 static inline void bch2_btree_node_lock_write(struct btree *b, struct btree_iter *iter)
 {
        EBUG_ON(iter->l[b->level].b != b);
-       EBUG_ON(iter->lock_seq[b->level] != b->lock.state.seq);
+       EBUG_ON(iter->l[b->level].lock_seq != b->lock.state.seq);
 
        if (!six_trylock_write(&b->lock))
                __bch2_btree_node_lock_write(b, iter);
index d57ca3d08c1687e019670c2d4156a68120323d45..14d8c75a4e8d1097a42d0164c6b373d082c59c31 100644 (file)
@@ -231,10 +231,9 @@ struct btree_iter {
        struct btree_iter_level {
                struct btree    *b;
                struct btree_node_iter iter;
+               u32             lock_seq;
        }                       l[BTREE_MAX_DEPTH];
 
-       u32                     lock_seq[BTREE_MAX_DEPTH];
-
        /*
         * Current unpacked key - so that bch2_btree_iter_next()/
         * bch2_btree_iter_next_slot() can correctly advance pos.