Userspace utilities to manage btrfs filesystems
Go to file
Josef Bacik 70749a77fe Btrfs-progs: deal with invalid key orderings and bad orphan items V2
A user had a fs where the objectid of an orphan item was not the actual orphan
item objectid.  This screwed up fsck because the block has keys in the wrong
order, also the fs scanning stuff will freak out because we have an inode with
nlink 0 and no orphan item.  So this patch is pretty big but is all related.

1) Deal with bad key ordering.  We can easily fix this up, so fix the checking
stuff to tell us exactly what it found when it said there was a problem.  Then
if it's bad key ordering we can reorder the keys and restart the scan.

2) Deal with bad keys.  If we find an orphan item with the wrong objectid it's
likely to screw with stuff, so keep track of these sort of things with a
bad_item list and just run through and delete any objects that don't make sense.
So far we just do this for orphan items but we could extend this as new stuff
pops up.

3) Deal with missing orphan items.  This is easy, if we have a file with i_nlink
set to 0 and no orphan item we can just add an orphan item.

4) Add the infrastructure to corrupt actual key values.  Needed this to create a
test image to verify I was fixing things properly.

This patch fixes the corrupt image I'm adding and passes the other make test
tests.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
2014-01-31 08:22:15 -08:00
man btrfs-progs: add fsck.btrfs stub and manpage 2014-01-31 08:22:13 -08:00
tests Btrfs-progs: add a test image for the transid fixer in btrfsck 2013-10-16 08:23:12 -04:00
.gitignore btrfs-progs: get C=1 sparse checking working again 2013-09-03 19:41:12 +02:00
bcp
bitops.h Btrfs-progs: add a free space cache checker to fsck V2 2013-04-23 18:56:21 +02:00
btrfs-calc-size.c btrfs-progs: free leaked roots in calc-size 2013-10-16 08:23:13 -04:00
btrfs-convert.c Btrfs-progs: fix the mismatch of extent buffer's space 2014-01-31 08:22:06 -08:00
btrfs-corrupt-block.c Btrfs-progs: deal with invalid key orderings and bad orphan items V2 2014-01-31 08:22:15 -08:00
btrfs-crc.c btrfs-progs: Fix getopt on arm/ppc platforms 2013-08-09 14:32:34 +02:00
btrfs-debug-tree.c btrfs-progs: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
btrfs-find-root.c btrfs-progs: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -08:00
btrfs-fragments.c btrfs-progs: remove unused variables 2013-10-16 08:23:13 -04:00
btrfs-image.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
btrfs-list.c btrfs-progs: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
btrfs-list.h btrfs-progs: add filter for deleted but uncleanded subvolumes 2013-10-24 05:57:44 -04:00
btrfs-map-logical.c btrfs-progs: fix -Wmissing-noreturn 2013-10-16 08:20:43 -04:00
btrfs-select-super.c btrfs-progs: btrfs-select-super output is confusing when it fails 2013-04-23 18:56:20 +02:00
btrfs-show-super.c btrfs-progs: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
btrfs-zero-log.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
btrfs.c btrfs-progs: move chunk-recover to rescue group 2013-10-16 08:21:38 -04:00
btrfsck.h Btrfs-progs: Add chunk rebuild function for RAID1/SINGLE/DUP 2013-07-03 14:06:55 -04:00
btrfstune.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
chunk-recover.c btrfs-progs: scan devices in parallel for chunk-recover 2014-01-31 08:22:09 -08:00
cmds-balance.c Btrfs-progs: fix magic return value in cmds-balance.c 2013-10-16 08:20:43 -04:00
cmds-check.c Btrfs-progs: deal with invalid key orderings and bad orphan items V2 2014-01-31 08:22:15 -08:00
cmds-device.c Btrfs-progs: make sure we return an error when we can't add a device 2013-10-24 05:57:44 -04:00
cmds-filesystem.c btrfs-progs: fix improper error prompt for defragment 2014-01-31 08:22:13 -08:00
cmds-inspect.c btrfs-progs: look up the containing tree root id 2013-10-16 08:23:11 -04: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: convert remaining uuid buffer declarations to BTRFS_UUID_UNPARSED_SIZE 2014-01-31 08:22:13 -08:00
cmds-replace.c Btrfs-progs: fix magic return value in cmds-replace.c 2013-10-16 08:20:42 -04:00
cmds-rescue.c Btrfs-progs: add super-recover to recover bad supers 2013-10-16 08:23:08 -04:00
cmds-restore.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
cmds-scrub.c Btrfs-progs: fix segfault when getting scrub status 2014-01-31 08:22:12 -08:00
cmds-send.c btrfs-progs: send: check if parent or clone sources are read-only 2014-01-31 08:22:13 -08:00
cmds-subvolume.c btrfs-progs: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
commands.h Btrfs-progs: add super-recover to recover bad supers 2013-10-16 08:23:08 -04:00
COPYING
crc32c.c btrfs-progs: make many private symbols static 2013-09-03 19:41:08 +02:00
crc32c.h btrfs-progs: libify some parts of btrfs-progs 2013-02-27 15:24:25 +01:00
ctree.c Btrfs-progs: deal with invalid key orderings and bad orphan items V2 2014-01-31 08:22:15 -08:00
ctree.h Btrfs-progs: deal with invalid key orderings and bad orphan items V2 2014-01-31 08:22:15 -08: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: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -08:00
disk-io.h Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
extent_io.c Btrfs-progs: fix the mismatch of extent buffer's space 2014-01-31 08:22:06 -08:00
extent_io.h Btrfs-progs: keep track of transid failures and fix them if possible 2013-10-16 08:23:12 -04:00
extent-cache.c Btrfs-progs: extend the extent cache for the device extent 2013-07-03 14:06:54 -04:00
extent-cache.h Btrfs-progs: extend the extent cache for the device extent 2013-07-03 14:06:54 -04:00
extent-tree.c mkfs: fix mkfs -r to properly allocate space 2013-10-16 10:42:53 -04:00
file-item.c Btrfs-progs: deal with invalid key orderings and bad orphan items V2 2014-01-31 08:22:15 -08:00
free-space-cache.c btrfs-progs: make many private symbols static 2013-09-03 19:41:08 +02:00
free-space-cache.h Btrfs-progs: add a free space cache checker to fsck V2 2013-04-23 18:56:21 +02:00
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: return 1 rather than 129 in usage() 2013-10-16 08:20:03 -04: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: mark static & remove unused from shared kernel code 2013-09-03 19:40:53 +02:00
INSTALL Removing btrfsctl, btrfs-vol, btrfs-show 2013-03-19 18:21:41 +01: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: fix typo in btrfs_err_str() 2013-10-16 08:20:42 -04:00
kerncompat.h btrfs-progs: get C=1 sparse checking working again 2013-09-03 19:41:12 +02: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
list.h Btrfs-progs: introduce list_{first, next}_entry/list_splice_tail{_init} 2013-07-03 14:06:55 -04:00
Makefile btrfs-progs: add fsck.btrfs stub and manpage 2014-01-31 08:22:13 -08:00
math.h Btrfs-progs: cleanup duplicated division functions 2013-08-09 14:32:28 +02:00
mkfs.c btrfs-progs: Turning ON incompat isn't an error 2014-01-31 08:22:10 -08:00
print-tree.c btrfs-progs: convert remaining uuid buffer declarations to BTRFS_UUID_UNPARSED_SIZE 2014-01-31 08:22:13 -08:00
print-tree.h
qgroup.c btrfs-progs: make it static if function isn't called outside 2014-01-31 08:22:01 -08: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: make many private symbols static 2013-09-03 19:41:08 +02:00
radix-tree.h btrfs-progs: libify some parts of btrfs-progs 2013-02-27 15:24:25 +01:00
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 Btrfs-progs: introduce common insert/search/delete functions for rb-tree 2013-07-03 14:06:54 -04:00
rbtree.h Btrfs-progs: introduce common insert/search/delete functions for rb-tree 2013-07-03 14:06:54 -04:00
repair.c Btrfs-progs: introduce common insert/search/delete functions for rb-tree 2013-07-03 14:06:54 -04:00
repair.h
root-tree.c Btrfs-progs: just return -ENOENT if we don't find the root item 2013-10-24 05:57:44 -04:00
send-stream.c Btrfs-progs: remove some unused code 2013-04-23 18:56:25 +02:00
send-stream.h Btrfs-progs: btrfs-receive optionally honors the end-cmd 2013-04-23 18:56:24 +02:00
send-test.c btrfs-progs: convert remaining uuid buffer declarations to BTRFS_UUID_UNPARSED_SIZE 2014-01-31 08:22:13 -08:00
send-utils.c Btrfs-progs: use UUID tree for send/receive 2013-08-09 14:32:31 +02:00
send-utils.h Btrfs-progs: use UUID tree for send/receive 2013-08-09 14:32:31 +02:00
send.h
show-blocks
super-recover.c Btrfs-progs: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05:00
transaction.h
utils.c Btrfs-progs: make sure we are opening a file or dir with open_file_or_dir() 2014-01-31 08:22:14 -08:00
utils.h btrfs-progs: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
uuid-tree.c btrfs-progs: fix in-place byte swapping 2013-09-03 19:41:06 +02:00
version.sh Update the version 2013-11-25 15:48:57 -05:00
volumes.c Btrfs-progs: chunk-recover: add new flag to prepare recovering for ordered data chunk 2014-01-31 08:22:07 -08:00
volumes.h btrfs-progs: mark static & remove unused from shared kernel code 2013-09-03 19:40:53 +02:00