Userspace utilities to manage btrfs filesystems
Go to file
Filipe David Borba Manana 6c9caa4dd6 btrfs-progs: check, fix csum check in the presence of non-inlined refs
When we have non-inlined extent references, we were failing to find the
corresponding extent item for an existing csum item in the csum tree.

Reproducer:

   mkfs.btrfs -f /dev/sdd
   mount /dev/sdd /mnt

   xfs_io -f -c "falloc 780366 135302" /mnt/foo
   xfs_io -c "falloc 327680 151552" /mnt/foo
   xfs_io -c "pwrite -S 0xff -b 131072 0 131072" /mnt/foo
   sync

   for i in `seq 1 40`; do btrfs subvolume snapshot /mnt /mnt/snap$i ; done
   umount /mnt

   btrfs check /dev/sdd

The check command exited with status 1 and the following output:

   Checking filesystem on /dev/sdd
   UUID: 2416ab5f-9d71-457e-bb13-a27d4f6b399a
   checking extents
   checking free space cache
   checking fs roots
   checking csums
   There are no extents for csum range 12980224-12984320
   Csum exists for 12980224-12984320 but there is no extent record
   found 1388544 bytes used err is 1
   total csum bytes: 132
   total tree bytes: 704512
   total fs tree bytes: 573440
   total extent tree bytes: 16384
   btree space waste bytes: 564479
   file data blocks allocated: 19341312
    referenced 14606336
   Btrfs v3.14.1-94-g80597e7

After this change it no longer erroneously reports a missing extent for the
csum item and exits with a status of 0.

Also added missing btrfs_prev_leaf() return value checks, as we were ignoring
errors and non-existence of left siblings completely.

Signed-off-by: Filipe David Borba Manana <fdmanana@gmail.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
2014-10-10 10:38:29 +02:00
Documentation btrfs-progs: wait until all subvolumes are cleaned 2014-10-10 09:32:05 +02:00
tests Btrfs-progs: fsck: add tests for extent tree rebuilding 2014-08-22 14:43:10 +02:00
.gitignore btrfs-progs: Introduce asciidoc based man page and btrfs man page. 2014-04-22 14:15:19 +02:00
COPYING
INSTALL btrfs-progs: Add information about libblkid requirement to INSTALL file 2014-08-22 14:39:31 +02:00
Makefile Btrfs-progs: make BUG*() be more verbose 2014-10-01 16:34:29 +02:00
bcp
bitops.h
btrfs-calc-size.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-convert.c btrfs-progs: Properly cast to avoid compiler warnings, fixes FTBFS on alpha and ia64 2014-10-01 16:33:26 +02:00
btrfs-corrupt-block.c btrfs-progs: corrupt-block: fix a delete and use bug corrupting extent tree 2014-09-14 13:12:27 +02:00
btrfs-crc.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-debug-tree.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-find-root.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-fragments.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-image.c btrfs-progs: add mount status check for btrfs-image 2014-08-22 15:07:03 +02:00
btrfs-list.c btrfs-progs: Add -R to list UUIDs of original received subvolume 2014-09-14 13:09:52 +02:00
btrfs-list.h btrfs-progs: Add -R to list UUIDs of original received subvolume 2014-09-14 13:09:52 +02:00
btrfs-map-logical.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-select-super.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs-show-super.c btrfs-progs: Add human readable incompat flags output for btrfs-show-super 2014-10-01 16:34:22 +02:00
btrfs-zero-log.c btrfs-progs: use check_argc_* to check arg number for all tools 2014-08-22 15:07:02 +02:00
btrfs.c btrfs-progs: move the check_argc_* functions into utils.c 2014-08-22 14:55:27 +02:00
btrfsck.h btrfs-progs: Copyright string update 2014-03-21 06:23:24 -07:00
btrfstune.c btrfs-progs: add ask_user confirmation for btrfstune clear seeding flag 2014-08-22 16:09:55 +02:00
chunk-recover.c btrfs-progs: Fix malloc size for superblock. 2014-10-10 09:09:47 +02:00
cmds-balance.c btrfs-progs: balance filter: add limit of processed chunks 2014-08-22 14:55:26 +02:00
cmds-check.c btrfs-progs: check, fix csum check in the presence of non-inlined refs 2014-10-10 10:38:29 +02:00
cmds-device.c btrfs-progs: scan /proc/partitions not all of /dev with "-d" 2014-10-10 09:32:11 +02:00
cmds-filesystem.c btrfs-progs: scan /proc/partitions not all of /dev with "-d" 2014-10-10 09:32:11 +02:00
cmds-inspect.c Btrfs-progs: fix some build warnings on 32bit platform 2014-08-22 15:07:03 +02:00
cmds-property.c btrfs-progs: remove unnecessary return value check in btrfs-property 2014-08-22 15:07:03 +02:00
cmds-qgroup.c btrfs-progs: qgroup destroy says create failed 2014-01-31 08:22:12 -08:00
cmds-quota.c Btrfs-progs: fix magic return value in cmds-quota.c 2013-10-16 08:20:41 -04:00
cmds-receive.c btrfs-progs: add missing descriptions of '--max-errors' in btrfs-receive documentation 2014-08-22 15:07:04 +02:00
cmds-replace.c btrfs-progs: show meaningful msgs for replace cmd upon raid56 2014-08-22 14:41:15 +02:00
cmds-rescue.c btrfs-progs: use check_argc_exact to check arg number of btrfs-rescue 2014-08-22 14:39:31 +02:00
cmds-restore.c btrfs-progs: remove wrong set_argv0 for restore 2014-09-14 19:06:12 +02:00
cmds-scrub.c btrfs-progs: random fixes for usage string of btrfs scrub 2014-08-22 16:09:48 +02:00
cmds-send.c btrfs-progs: Check fstype in find_mount_root() 2014-08-22 15:07:02 +02:00
cmds-subvolume.c btrfs-progs: wait until all subvolumes are cleaned 2014-10-10 09:32:05 +02:00
commands.h btrfs-progs: move the check_argc_* functions into utils.c 2014-08-22 14:55:27 +02:00
crc32c.c btrfs-progs: make many private symbols static 2013-09-03 19:41:08 +02:00
crc32c.h
ctree.c Btrfs-progs: check all slots in leaves 2014-10-01 16:59:10 +02:00
ctree.h btrfs-progs: read global reserve size from space infos 2014-08-28 02:03:33 +02:00
dir-item.c btrfs-progs: drop unused parameter from btrfs_item_nr 2013-10-16 08:23:10 -04:00
dir-test.c Btrfs-progs: fix magic return value in dir-test.c 2013-10-16 08:20:42 -04:00
disk-io.c btrfs-progs: don't fall back to recursive /dev scan 2014-10-10 09:32:13 +02:00
disk-io.h btrfs-progs: kill BUG_ON in readahead_tree_block() 2014-09-14 13:19:44 +02:00
extent-cache.c
extent-cache.h
extent-tree.c btrfs-progs: remove unused flags for btrfs_path 2014-08-28 02:03:18 +02:00
extent_io.c btrfs-progs: Do not free dirty extent buffer 2014-08-28 02:03:09 +02:00
extent_io.h Btrfs-progs: keep track of transid failures and fix them if possible 2013-10-16 08:23:12 -04:00
file-item.c btrfs-progs: remove btrfs_release_path before btrfs_free_path 2014-09-14 19:06:12 +02:00
free-space-cache.c btrfs-progs: clean fsck noise for free inode generation 0 2014-08-22 14:43:09 +02:00
free-space-cache.h
fsck.btrfs btrfs-progs: add fsck.btrfs stub and manpage 2014-01-31 08:22:13 -08:00
hash.h
hasher.c
help.c btrfs-progs: move the check_argc_* functions into utils.c 2014-08-22 14:55:27 +02:00
inode-item.c btrfs-progs: mark static & remove unused from shared kernel code 2013-09-03 19:40:53 +02:00
inode-map.c btrfs-progs: remove btrfs_release_path before btrfs_free_path 2014-09-14 19:06:12 +02:00
ioctl-test.c btrfs-progs: mark static & remove unused from non-kernel code 2013-09-03 19:40:54 +02:00
ioctl.h btrfs-progs: balance filter: add limit of processed chunks 2014-08-22 14:55:26 +02:00
kerncompat.h Btrfs-progs: make BUG*() be more verbose 2014-10-01 16:34:29 +02:00
list.h Btrfs-progs: introduce list_{first, next}_entry/list_splice_tail{_init} 2013-07-03 14:06:55 -04:00
list_sort.c btrfs-progs: add list_sort and use it to sort devices by id 2013-10-16 08:22:26 -04:00
list_sort.h btrfs-progs: add list_sort and use it to sort devices by id 2013-10-16 08:22:26 -04:00
math.h btrfs-progs: Copyright string update 2014-03-21 06:23:24 -07:00
mkfs.c btrfs-progs: mkfs make --uuid require an argument 2014-08-22 16:09:56 +02:00
print-tree.c btrfs-progs: Add human readable flags output for chunk/block group type. 2014-08-22 14:39:35 +02:00
print-tree.h btrfs-progs: add quota group verify code 2014-08-22 14:39:33 +02:00
props.c Btrfs-progs: set string end sing '\0' for property 2014-05-02 17:05:37 +02:00
props.h Btrfs-progs: introduce btrfs property subgroup 2014-01-31 08:22:31 -08:00
qgroup-verify.c Btrfs-progs: fix typos 2014-09-02 17:05:32 +02:00
qgroup-verify.h btrfs-progs: show extent state for a subvolume 2014-08-22 15:04:16 +02:00
qgroup.c btrfs-progs: print qgroup excl as unsigned 2014-08-22 14:39:32 +02:00
qgroup.h Btrfs-progs: enhance btrfs qgroup show to sort qgroups 2013-10-16 08:23:12 -04:00
quick-test.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
radix-tree.c btrfs-progs: Fix undefined behavior in radix-tree.c. 2014-08-22 14:39:34 +02:00
radix-tree.h
raid6.c btrfs-progs: give raid6.c its exported prototypes 2013-09-03 19:41:11 +02:00
random-test.c Btrfs-progs: fix magic return value in random-test.c 2013-10-16 08:20:42 -04:00
rbtree.c
rbtree.h
repair.c
repair.h
root-tree.c Btrfs-progs: free path if we don't find root item 2014-03-21 06:23:32 -07:00
send-stream.c btrfs-progs: fix unaligned loads in receive 2014-08-22 16:09:55 +02:00
send-stream.h btrfs-progs: library version defines 2014-09-02 17:04:15 +02:00
send-test.c Btrfs-progs: remove unsed pthread attribute objects 2014-04-22 14:33:35 +02:00
send-utils.c btrfs-progs: Init root_item to avoid gcc 4.8.2 warning 2014-03-21 06:23:29 -07:00
send-utils.h btrfs-progs: enclose uuid tree compat code with ifdefs 2014-03-21 06:23:07 -07:00
send.h
show-blocks
super-recover.c btrfs-progs: Allow btrfs_read_dev_super() to read all 3 super for super_recover. 2014-08-22 15:04:50 +02:00
transaction.h
ulist.c btrfs-progs: import ulist 2014-08-22 14:39:33 +02:00
ulist.h btrfs-progs: import ulist 2014-08-22 14:39:33 +02:00
utils-lib.c btrfs-progs: move arg_strtou64 to a separate file for library 2014-05-02 17:04:28 +02:00
utils.c btrfs-progs: remove BTRFS_SCAN_DEV and btrfs_scan_one_dir 2014-10-10 09:32:17 +02:00
utils.h btrfs-progs: remove BTRFS_SCAN_DEV and btrfs_scan_one_dir 2014-10-10 09:32:17 +02:00
uuid-tree.c btrfs-progs: fix in-place byte swapping 2013-09-03 19:41:06 +02:00
version.sh Btrfs progs v3.16.2 2014-10-01 18:07:59 +02:00
volumes.c Btrfs-progs: don't assert when we have an invalid mapping 2014-10-01 16:34:45 +02:00
volumes.h btrfs-progs: Allow btrfs_read_dev_super() to read all 3 super for super_recover. 2014-08-22 15:04:50 +02:00