summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fusionio.com>2013-06-05 10:02:59 -0400
committerChris Mason <chris.mason@fusionio.com>2013-06-19 13:52:56 -0400
commitf00dd8386a57d241d0f7c72653f7ffad118dc5ae (patch)
tree53f6b68eee7da04126a4e256f3fc1bee75f4972f
parent7e992408e3723bdb14f4af4f970b12f8f76d0b14 (diff)
Btrfs-progs: fix reference check for roots in btrfsck
I noticed that I was getting these errors on a bigger file system with more snapshots that had been removed. This check is bogus since we won't inc rec->found_ref if we don't find a REF_KEY _and_ a DIR_ITEM, so we only have to worry about there being no references to a root if it actually has a root item. If it doesn't then it's just referenced by things that will go no where anyway. With this patch fsck no longer incorrectly complains about this file system image I have. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--cmds-check.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/cmds-check.c b/cmds-check.c
index 4083298f..68cdd523 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -1637,6 +1637,14 @@ static int check_root_refs(struct btrfs_root *root,
rec->objectid);
if (ret == 0)
continue;
+
+ /*
+ * If we don't have a root item then we likely just have
+ * a dir item in a snapshot for this root but no actual
+ * ref key or anything so it's meaningless.
+ */
+ if (!rec->found_root_item)
+ continue;
errors++;
fprintf(stderr, "fs tree %llu not referenced\n",
(unsigned long long)rec->objectid);