Development of userspace BTRFS tools
Find a file
Liu Bo 53ee1bccf9 Btrfs-progs: fix the mismatch of extent buffer's space
Now we set @refs to 2 on creating a new extent buffer, meanwhile we
allocate the needed free space, but we don't give enough free_extent_buffer()
to reduce the eb's references to zero so that the eb can finally be freed,
so the problem is we has decrease the referene count of backrefs to zero, which
ends up releasing the space occupied by the eb, and this space can be allocated
again for something else(another eb or disk), usually a crash(core dump) will
occur, I've hit a crash in rb_insert() because another eb re-use the space while
the original one is floating around.

We should do the same thing as the kernel code does, it's necessary to initialize
@refs to 1 instead of 2, this helps us get rid of the above problem.

Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <clm@fb.com>
2014-01-31 08:22:06 -08:00
man btrfs-progs: man: add rescue super-recover bits 2013-11-14 12:21:17 -05: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 Btrfs-progs: Correct path munging in bcp 2011-10-25 09:18:58 -04:00
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: rework open_ctree to take flags, add a new one V2 2013-11-07 16:10:40 -05: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: chunk-recover: use right size when allocating chunk root node 2014-01-31 08:22:06 -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: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -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: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -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: annotate fallthroughs in parse_limit 2013-11-07 16:10:41 -05: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: try harder to make btrfs receive successfully 2014-01-31 08:22:02 -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: define BTRFS_UUID_UNPARSE_SIZE for uuid unparse buf size 2014-01-31 08:22:03 -08:00
cmds-send.c btrfs-progs: use /proc/self/mounts 2014-01-31 08:22:01 -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 fix COPYING 2007-06-12 15:41:08 -04:00
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: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -08:00
ctree.h btrfs-progs: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -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-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
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
file-item.c btrfs-progs: mark static & remove unused from shared kernel code 2013-09-03 19:40:53 +02: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
hash.h Switch btrfs_name_hash() to crc32c 2008-08-20 20:11:23 -04:00
hasher.c Unaligned access fixes 2008-02-15 11:19:58 -05:00
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.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
Makefile Add -fno-strict-aliasing 2013-11-22 08:41:50 -05:00
math.h Btrfs-progs: cleanup duplicated division functions 2013-08-09 14:32:28 +02:00
mkfs.c Btrfs-progs: fix the mismatch of extent buffer's space 2014-01-31 08:22:06 -08:00
print-tree.c btrfs-progs: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -08:00
print-tree.h Btrfs: add btrfs-debug-tree -b <block number> to print a single block 2010-04-06 09:30:17 -04:00
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 Btrfsck: add the ability to prune corrupt extent allocation tree blocks 2012-02-21 14:37:21 -05:00
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: don't deref pipefd[-1] 2013-10-16 08:23:13 -04: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 btrfs-progs: make libbtrfs usable from C++ 2013-02-19 11:15:30 +01:00
show-blocks Fix showblocks to display different colors for different metadata roots 2009-03-09 13:00:44 -04:00
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 btrfs-progs: add malloc check in transaction.h/btrfs_start_transaction 2013-01-18 18:27:21 +01:00
utils.c btrfs-progs: Make btrfs_header_chunk_tree_uuid() return unsigned long 2014-01-31 08:22:04 -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: calculate available blocks on device properly 2013-10-16 08:20:42 -04:00
volumes.h btrfs-progs: mark static & remove unused from shared kernel code 2013-09-03 19:40:53 +02:00