summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosef Bacik <jbacik@fb.com>2015-01-23 11:39:28 -0500
committerJosef Bacik <jbacik@fb.com>2015-02-09 14:53:15 -0500
commit20feed2ea49fff104520d3407ce0c8a935204c44 (patch)
tree0b720ce2c40447b1b84d8d64354312b166e770f5
parent65ac3b27586e6733191f941480f9348963dab9a9 (diff)
Btrfs-progs: don't check csums for data reloc root
The data reloc root is weird with it's csums. It'll copy an entire extent and then log any csums it finds, which makes it look weird when it comes to prealloc extents. So just skip the data reloc tree, it's special and we just don't need to worry about it. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com>
-rw-r--r--cmds-check.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/cmds-check.c b/cmds-check.c
index 2b08c648..21638235 100644
--- a/cmds-check.c
+++ b/cmds-check.c
@@ -1530,7 +1530,16 @@ static int process_file_extent(struct btrfs_root *root,
}
rec->extent_end = key->offset + num_bytes;
- if (disk_bytenr > 0) {
+ /*
+ * The data reloc tree will copy full extents into its inode and then
+ * copy the corresponding csums. Because the extent it copied could be
+ * a preallocated extent that hasn't been written to yet there may be no
+ * csums to copy, ergo we won't have csums for our file extent. This is
+ * ok so just don't bother checking csums if the inode belongs to the
+ * data reloc tree.
+ */
+ if (disk_bytenr > 0 &&
+ btrfs_header_owner(eb) != BTRFS_DATA_RELOC_TREE_OBJECTID) {
u64 found;
if (btrfs_file_extent_compression(eb, fi))
num_bytes = btrfs_file_extent_disk_num_bytes(eb, fi);