UPTODATE means btree_path is useable, so here use
btree_path_is_uptodate to check this status. And the old
function btree_path_set_dirty cannot represent what it really
does (such as if UPTODATE is passed into it, btree_path sometime
wasn't dirty).

Signed-off-by: Hongbo Li <[email protected]>
---
 fs/bcachefs/btree_iter.c         | 16 ++++++++--------
 fs/bcachefs/btree_iter.h         | 13 +++++++++----
 fs/bcachefs/btree_key_cache.c    |  2 +-
 fs/bcachefs/btree_locking.c      | 10 +++++-----
 fs/bcachefs/btree_locking.h      |  8 ++++----
 fs/bcachefs/btree_trans_commit.c |  2 +-
 6 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c
index 2202b3571c81..513142e68f89 100644
--- a/fs/bcachefs/btree_iter.c
+++ b/fs/bcachefs/btree_iter.c
@@ -693,7 +693,7 @@ void bch2_trans_node_add(struct btree_trans *trans,
        for (;
             path && btree_path_pos_in_node(path, b);
             path = next_btree_path(trans, path))
-               if (path->status == UPTODATE && !path->cached) {
+               if (btree_path_is_uptodate(path) && !path->cached) {
                        enum btree_node_locked_type t =
                                btree_lock_want(path, b->c.level);
 
@@ -1007,7 +1007,7 @@ static int bch2_btree_path_traverse_all(struct 
btree_trans *trans)
                 * Traversing a path can cause another path to be added at about
                 * the same position:
                 */
-               if (trans->paths[idx].status) {
+               if (!btree_path_is_uptodate(&trans->paths[idx])) {
                        __btree_path_get(&trans->paths[idx], false);
                        ret = bch2_btree_path_traverse_one(trans, idx, 0, 
_THIS_IP_);
                        __btree_path_put(&trans->paths[idx], false);
@@ -1068,7 +1068,7 @@ static void btree_path_set_level_down(struct btree_trans 
*trans,
                if (btree_lock_want(path, l) == BTREE_NODE_UNLOCKED)
                        btree_node_unlock(trans, path, l);
 
-       btree_path_set_dirty(path, NEED_TRAVERSE);
+       btree_path_update_state(path, NEED_TRAVERSE);
        bch2_btree_path_verify(trans, path);
 }
 
@@ -1245,7 +1245,7 @@ __bch2_btree_path_set_pos(struct btree_trans *trans,
        if (unlikely(path->cached)) {
                btree_node_unlock(trans, path, 0);
                path->l[0].b = ERR_PTR(-BCH_ERR_no_btree_node_up);
-               btree_path_set_dirty(path, NEED_TRAVERSE);
+               btree_path_update_state(path, NEED_TRAVERSE);
                goto out;
        }
 
@@ -1274,7 +1274,7 @@ __bch2_btree_path_set_pos(struct btree_trans *trans,
        }
 
        if (unlikely(level != path->level)) {
-               btree_path_set_dirty(path, NEED_TRAVERSE);
+               btree_path_update_state(path, NEED_TRAVERSE);
                __bch2_btree_path_unlock(trans, path);
        }
 out:
@@ -1675,7 +1675,7 @@ struct bkey_s_c bch2_btree_path_peek_slot(struct 
btree_path *path, struct bkey *
        if (unlikely(!l->b))
                return bkey_s_c_null;
 
-       EBUG_ON(path->status != UPTODATE);
+       EBUG_ON(!btree_path_is_uptodate(path));
        EBUG_ON(!btree_node_locked(path, path->level));
 
        if (!path->cached) {
@@ -1811,7 +1811,7 @@ struct btree *bch2_btree_iter_next_node(struct btree_iter 
*iter)
                __bch2_btree_path_unlock(trans, path);
                path->l[path->level].b          = 
ERR_PTR(-BCH_ERR_no_btree_node_relock);
                path->l[path->level + 1].b      = 
ERR_PTR(-BCH_ERR_no_btree_node_relock);
-               btree_path_set_dirty(path, NEED_TRAVERSE);
+               btree_path_update_state(path, NEED_TRAVERSE);
                trace_and_count(trans->c, trans_restart_relock_next_node, 
trans, _THIS_IP_, path);
                ret = btree_trans_restart(trans, 
BCH_ERR_transaction_restart_relock);
                goto err;
@@ -1849,7 +1849,7 @@ struct btree *bch2_btree_iter_next_node(struct btree_iter 
*iter)
                                        iter->flags & BTREE_ITER_INTENT,
                                        btree_iter_ip_allocated(iter));
        btree_path_set_should_be_locked(btree_iter_path(trans, iter));
-       EBUG_ON(btree_iter_path(trans, iter)->status);
+       EBUG_ON(!btree_path_is_uptodate(btree_iter_path(trans, iter)));
 out:
        bch2_btree_iter_verify_entry_exit(iter);
        bch2_btree_iter_verify(iter);
diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h
index c76070494284..f9ed8c44ab5a 100644
--- a/fs/bcachefs/btree_iter.h
+++ b/fs/bcachefs/btree_iter.h
@@ -27,10 +27,15 @@ static inline bool __btree_path_put(struct btree_path 
*path, bool intent)
        return --path->ref == 0;
 }
 
-static inline void btree_path_set_dirty(struct btree_path *path,
-                                       enum btree_path_state u)
+static inline bool btree_path_is_uptodate(struct btree_path *path)
 {
-       path->status = max_t(unsigned, path->status, u);
+    return path->status == UPTODATE;
+}
+
+static inline void btree_path_update_state(struct btree_path *path,
+                    enum btree_path_state u)
+{
+    path->status = max_t(unsigned, path->status, u);
 }
 
 static inline struct btree *btree_path_node(struct btree_path *path,
@@ -219,7 +224,7 @@ int __must_check bch2_btree_path_traverse_one(struct 
btree_trans *,
 static inline int __must_check bch2_btree_path_traverse(struct btree_trans 
*trans,
                                          btree_path_idx_t path, unsigned flags)
 {
-       if (trans->paths[path].status < NEED_RELOCK)
+       if (btree_path_is_uptodate(&trans->paths[path]))
                return 0;
 
        return bch2_btree_path_traverse_one(trans, path, flags, _RET_IP_);
diff --git a/fs/bcachefs/btree_key_cache.c b/fs/bcachefs/btree_key_cache.c
index 47cf735f24a0..d178b197dc17 100644
--- a/fs/bcachefs/btree_key_cache.c
+++ b/fs/bcachefs/btree_key_cache.c
@@ -540,7 +540,7 @@ bch2_btree_path_traverse_cached_slowpath(struct btree_trans 
*trans, struct btree
                set_bit(BKEY_CACHED_ACCESSED, &ck->flags);
 
        BUG_ON(btree_node_locked_type(path, 0) != btree_lock_want(path, 0));
-       BUG_ON(path->status);
+       BUG_ON(!btree_path_is_uptodate(path));
 
        return ret;
 err:
diff --git a/fs/bcachefs/btree_locking.c b/fs/bcachefs/btree_locking.c
index 8d8e3207ca7a..0f18aacb9b5e 100644
--- a/fs/bcachefs/btree_locking.c
+++ b/fs/bcachefs/btree_locking.c
@@ -462,7 +462,7 @@ void bch2_btree_node_lock_write_nofail(struct btree_trans 
*trans,
                for (i = 0; i < BTREE_MAX_DEPTH; i++)
                        if (btree_node_read_locked(linked, i)) {
                                btree_node_unlock(trans, linked, i);
-                               btree_path_set_dirty(linked, NEED_RELOCK);
+                               btree_path_update_state(linked, NEED_RELOCK);
                        }
        }
 
@@ -505,7 +505,7 @@ static inline bool btree_path_get_locks(struct btree_trans 
*trans,
         */
        if (fail_idx >= 0) {
                __bch2_btree_path_unlock(trans, path);
-               btree_path_set_dirty(path, NEED_TRAVERSE);
+               btree_path_update_state(path, NEED_TRAVERSE);
 
                do {
                        path->l[fail_idx].b = upgrade
@@ -520,7 +520,7 @@ static inline bool btree_path_get_locks(struct btree_trans 
*trans,
 
        bch2_trans_verify_locks(trans);
 
-       return path->status < NEED_RELOCK;
+       return btree_path_is_uptodate(path);
 }
 
 bool __bch2_btree_node_relock(struct btree_trans *trans,
@@ -621,7 +621,7 @@ int bch2_btree_path_relock_intent(struct btree_trans *trans,
             l++) {
                if (!bch2_btree_node_relock(trans, path, l)) {
                        __bch2_btree_path_unlock(trans, path);
-                       btree_path_set_dirty(path, NEED_TRAVERSE);
+                       btree_path_update_state(path, NEED_TRAVERSE);
                        trace_and_count(trans->c, 
trans_restart_relock_path_intent, trans, _RET_IP_, path);
                        return btree_trans_restart(trans, 
BCH_ERR_transaction_restart_relock_path_intent);
                }
@@ -865,7 +865,7 @@ void bch2_btree_path_verify_locks(struct btree_path *path)
        unsigned l;
 
        if (!path->nodes_locked) {
-               BUG_ON(path->status == UPTODATE &&
+               BUG_ON(btree_path_is_uptodate(path) &&
                       btree_path_node(path, path->level));
                return;
        }
diff --git a/fs/bcachefs/btree_locking.h b/fs/bcachefs/btree_locking.h
index f3f03292a675..f58f769c0f19 100644
--- a/fs/bcachefs/btree_locking.h
+++ b/fs/bcachefs/btree_locking.h
@@ -157,7 +157,7 @@ static inline int btree_path_highest_level_locked(struct 
btree_path *path)
 static inline void __bch2_btree_path_unlock(struct btree_trans *trans,
                                            struct btree_path *path)
 {
-       btree_path_set_dirty(path, NEED_RELOCK);
+       btree_path_update_state(path, NEED_RELOCK);
 
        while (path->nodes_locked)
                btree_node_unlock(trans, path, 
btree_path_lowest_level_locked(path));
@@ -371,7 +371,7 @@ static inline int bch2_btree_path_upgrade(struct 
btree_trans *trans,
 
        if (path->locks_want < new_locks_want
            ? __bch2_btree_path_upgrade(trans, path, new_locks_want, &f)
-           : path->status == UPTODATE)
+           : btree_path_is_uptodate(path))
                return 0;
 
        trace_and_count(trans->c, trans_restart_upgrade, trans, _THIS_IP_, path,
@@ -384,7 +384,7 @@ static inline int bch2_btree_path_upgrade(struct 
btree_trans *trans,
 static inline void btree_path_set_should_be_locked(struct btree_path *path)
 {
        EBUG_ON(!btree_node_locked(path, path->level));
-       EBUG_ON(path->status);
+       EBUG_ON(!btree_path_is_uptodate(path));
 
        path->should_be_locked = true;
 }
@@ -401,7 +401,7 @@ static inline void btree_path_set_level_up(struct 
btree_trans *trans,
                                    struct btree_path *path)
 {
        __btree_path_set_level_up(trans, path, path->level++);
-       btree_path_set_dirty(path, NEED_TRAVERSE);
+       btree_path_update_state(path, NEED_TRAVERSE);
 }
 
 /* debug */
diff --git a/fs/bcachefs/btree_trans_commit.c b/fs/bcachefs/btree_trans_commit.c
index 0c94a885b567..222c52c1d949 100644
--- a/fs/bcachefs/btree_trans_commit.c
+++ b/fs/bcachefs/btree_trans_commit.c
@@ -745,7 +745,7 @@ bch2_trans_commit_write_locked(struct btree_trans *trans, 
unsigned flags,
                        bch2_btree_insert_key_cached(trans, flags, i);
                else {
                        bch2_btree_key_cache_drop(trans, path);
-                       btree_path_set_dirty(path, NEED_TRAVERSE);
+                       btree_path_update_state(path, NEED_TRAVERSE);
                }
        }
 
-- 
2.34.1


Reply via email to