From: Kent Overstreet <kent.overstreet@gmail.com>
Date: Fri, 5 Apr 2019 03:01:54 +0000 (-0400)
Subject: bcachefs: initial gc no longer needs to touch every node
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=4881fdb7566dcc52aaf05f9b8f044a5ecfeff81b;p=linux.git

bcachefs: initial gc no longer needs to touch every node

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---

diff --git a/fs/bcachefs/btree_gc.c b/fs/bcachefs/btree_gc.c
index c572391c4dad9..84a0bb9202c46 100644
--- a/fs/bcachefs/btree_gc.c
+++ b/fs/bcachefs/btree_gc.c
@@ -210,7 +210,10 @@ static int bch2_gc_btree(struct bch_fs *c, enum btree_id btree_id,
 	struct btree_iter *iter;
 	struct btree *b;
 	struct range_checks r;
-	unsigned depth = btree_node_type_needs_gc(btree_id) ? 0 : 1;
+	unsigned depth = metadata_only			? 1
+		: expensive_debug_checks(c)		? 0
+		: !btree_node_type_needs_gc(btree_id)	? 1
+		: 0;
 	u8 max_stale;
 	int ret = 0;
 
@@ -218,17 +221,6 @@ static int bch2_gc_btree(struct bch_fs *c, enum btree_id btree_id,
 
 	gc_pos_set(c, gc_pos_btree(btree_id, POS_MIN, 0));
 
-	/*
-	 * if expensive_debug_checks is on, run range_checks on all leaf nodes:
-	 *
-	 * and on startup, we have to read every btree node (XXX: only if it was
-	 * an unclean shutdown)
-	 */
-	if (metadata_only)
-		depth = 1;
-	else if (initial || expensive_debug_checks(c))
-		depth = 0;
-
 	btree_node_range_checks_init(&r, depth);
 
 	__for_each_btree_node(&trans, iter, btree_id, POS_MIN,