From: Kent Overstreet Date: Sun, 5 Aug 2018 18:41:29 +0000 (-0400) Subject: bcachefs: make struct btree_iter a bit smaller X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=e4ccb251312003a9feed402e1958d0fef24987f1;p=linux.git bcachefs: make struct btree_iter a bit smaller Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index 9d92826181dca..ae19ba125a71c 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -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); } diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index 315cba28f6b2b..1667ba448a187 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -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 * diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h index f262e44314147..c1d16411154eb 100644 --- a/fs/bcachefs/btree_locking.h +++ b/fs/bcachefs/btree_locking.h @@ -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); diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h index d57ca3d08c168..14d8c75a4e8d1 100644 --- a/fs/bcachefs/btree_types.h +++ b/fs/bcachefs/btree_types.h @@ -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.