From: Nikita Ofitserov <himi...@gmail.com>

Concentrate iteration policy inside the caller so that accurate
progress reporting would be possible.

Signed-off-by: Nikita Ofitserov <himi...@gmail.com>
---
 fs/bcachefs/btree_gc.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c
index 
2b1b6b7ffdf0af7ec0bf4cbaf68cc9a53a20cfce..2a369aebdbe216ed665115e27388ab4821696bf8
 100644
--- a/fs/bcachefs/btree_gc.c
+++ b/fs/bcachefs/btree_gc.c
@@ -717,16 +717,12 @@ static int bch2_gc_mark_key(struct btree_trans *trans, 
enum btree_id btree_id,
 
 static int bch2_gc_btree(struct btree_trans *trans,
                         struct progress_indicator_state *progress,
-                        enum btree_id btree, bool initial)
+                        enum btree_id btree, unsigned target_depth,
+                        bool initial)
 {
        struct bch_fs *c = trans->c;
-       unsigned target_depth = BIT_ULL(btree) & btree_leaf_has_triggers_mask ? 
0 : 1;
        int ret = 0;
 
-       /* We need to make sure every leaf node is readable before going RW */
-       if (initial)
-               target_depth = 0;
-
        for (unsigned level = target_depth; level < BTREE_MAX_DEPTH; level++) {
                struct btree *prev = NULL;
                struct btree_iter iter;
@@ -797,7 +793,8 @@ static int bch2_gc_btrees(struct bch_fs *c)
                if (IS_ERR_OR_NULL(bch2_btree_id_root(c, btree)->b))
                        continue;
 
-               ret = bch2_gc_btree(trans, &progress, btree, true);
+               /* We need to make sure every leaf node is readable before 
going RW */
+               ret = bch2_gc_btree(trans, &progress, btree, 0, true);
        }
 
        bch_err_fn(c, ret);

-- 
2.50.1



Reply via email to