summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-08-05 14:41:29 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-08-08 15:25:37 -0400
commita9ae6211c3926e0c25a3bacb3a7d33378b5f4236 (patch)
tree1260b56c891826ef6c08ae85c278394675372d6e
parent31e217c43e2099f15353d14adc98597f0ae0e2a8 (diff)
bcachefs: make struct btree_iter a bit smaller
-rw-r--r--fs/bcachefs/btree_iter.c14
-rw-r--r--fs/bcachefs/btree_iter.h2
-rw-r--r--fs/bcachefs/btree_locking.h2
-rw-r--r--fs/bcachefs/btree_types.h3
4 files changed, 10 insertions, 11 deletions
diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index e9410f196e7a..91575782c83b 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -34,10 +34,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);
}
@@ -79,8 +79,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;
@@ -105,10 +105,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;
@@ -686,7 +686,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 d046ad71a7ba..8f35fb904336 100644
--- a/fs/bcachefs/btree_iter.h
+++ b/fs/bcachefs/btree_iter.h
@@ -40,7 +40,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 ddf70a3b41bb..9bbed99eb6ac 100644
--- a/fs/bcachefs/btree_locking.h
+++ b/fs/bcachefs/btree_locking.h
@@ -205,7 +205,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 ff3122565858..a4b91bddfdff 100644
--- a/fs/bcachefs/btree_types.h
+++ b/fs/bcachefs/btree_types.h
@@ -230,10 +230,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.