linux/fs/btrfs
Josef Bacik 594831c4b2 Btrfs: fix potential race in extent buffer freeing
This sounds sort of impossible but it is the only thing I can think of and
at the very least it is theoretically possible so here it goes.

If we are in try_release_extent_buffer we will check that the ref count on
the extent buffer is 1 and not under IO, and then go down and clear the tree
ref.  If between this check and clearing the tree ref somebody else comes in
and grabs a ref on the eb and the marks it dirty before
try_release_extent_buffer() does it's tree ref clear we can end up with a
dirty eb that will be freed while it is still dirty which will result in a
panic.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
2012-07-23 16:28:09 -04:00
..
acl.c Btrfs: cache no acl on new inodes 2012-05-30 10:23:27 -04:00
async-thread.c btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
async-thread.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
backref.c Btrfs: leave critical region in btrfs_find_all_roots as soon as possible 2012-06-27 16:34:39 +02:00
backref.h Btrfs: use the tree modification log for backref resolving 2012-05-30 15:17:34 +02:00
btrfs_inode.h Btrfs: kill free_space pointer from inode structure 2012-07-23 16:28:05 -04:00
check-integrity.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
check-integrity.h Btrfs: add optional integrity check code 2011-12-21 19:14:09 +01:00
compat.h
compression.c Merge branch 'for-linus-min' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2012-04-13 19:41:27 -07:00
compression.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ctree.c Btrfs: fix buffer leak in btrfs_next_old_leaf 2012-07-23 16:28:03 -04:00
ctree.h Btrfs: rewrite BTRFS_SETGET_FUNCS 2012-07-23 16:28:06 -04:00
delayed-inode.c Btrfs: zero unused bytes in inode item 2012-07-23 16:28:05 -04:00
delayed-inode.h Btrfs: flush delayed inodes if we're short on space 2012-07-23 15:41:40 -04:00
delayed-ref.c Btrfs: use delayed ref sequence numbers for all fs-tree updates 2012-05-30 18:18:21 +02:00
delayed-ref.h Btrfs: use delayed ref sequence numbers for all fs-tree updates 2012-05-30 18:18:21 +02:00
dir-item.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
disk-io.c Btrfs: avoid I/O repair BUG() from btree_read_extent_buffer_pages() 2012-07-23 16:27:59 -04:00
disk-io.h btrfs: Drop unused function btrfs_abort_devices() 2012-05-30 10:23:39 -04:00
export.c ->encode_fh() API change 2012-05-29 23:28:33 -04:00
export.h
extent_io.c Btrfs: fix potential race in extent buffer freeing 2012-07-23 16:28:09 -04:00
extent_io.h Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
extent_map.c Btrfs: clean up code for merging extent maps 2011-08-01 14:30:50 -04:00
extent_map.h btrfs: fix structs where bitfields and spinlock/atomic share 8B word 2012-02-15 16:40:25 +01:00
extent-tree.c Btrfs: kill free_space pointer from inode structure 2012-07-23 16:28:05 -04:00
file-item.c Btrfs: kill root from btrfs_is_free_space_inode 2012-07-23 16:28:00 -04:00
file.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2012-07-05 13:06:25 -07:00
free-space-cache.c Btrfs: do not count in readonly bytes 2012-07-23 16:28:03 -04:00
free-space-cache.h btrfs: remove all unused functions 2011-05-06 12:34:03 +02:00
hash.h Btrfs: remove crc32c.h and use libcrc32c directly. 2009-06-10 11:29:53 -04:00
inode-item.c Merge branch 'error-handling' into for-linus 2012-03-28 20:31:37 -04:00
inode-map.c Btrfs: show useful info in space reservation tracepoint 2012-03-29 09:57:44 -04:00
inode-map.h Btrfs: Support reading/writing on disk free ino cache 2011-04-25 16:46:11 +08:00
inode.c Btrfs: zero unused bytes in inode item 2012-07-23 16:28:05 -04:00
ioctl.c Btrfs: do not set subvolume flags in readonly mode 2012-07-23 16:27:58 -04:00
ioctl.h Btrfs: add DEVICE_READY ioctl 2012-07-23 16:27:42 -04:00
Kconfig Btrfs: add config option to enable btrfs integrity check 2011-12-21 19:14:16 +01:00
locking.c Btrfs: reduce calls to wake_up on uncontended locks 2012-07-23 15:36:18 -04:00
locking.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
lzo.c btrfs: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:21 +08:00
Makefile Merge branch 'integrity-check-patch-v2' of git://btrfs.giantdisaster.de/git/btrfs into integration 2012-01-16 15:27:58 -05:00
ordered-data.c Btrfs: call filemap_fdatawrite twice for compression 2012-06-14 21:30:54 -04:00
ordered-data.h Btrfs: finish ordered extents in their own thread 2012-05-30 10:23:33 -04:00
orphan.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
print-tree.c Btrfs: read device stats on mount, write modified ones during commit 2012-05-30 10:23:41 -04:00
print-tree.h
rcu-string.h Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
reada.c Btrfs: set ioprio of scrub readahead to idle 2012-05-30 10:23:43 -04:00
relocation.c Btrfs: fix error handling in __add_reloc_root() 2012-07-23 16:27:53 -04:00
root-tree.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
scrub.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
struct-funcs.c Btrfs: rewrite BTRFS_SETGET_FUNCS 2012-07-23 16:28:06 -04:00
super.c Btrfs: add DEVICE_READY ioctl 2012-07-23 16:27:42 -04:00
sysfs.c btrfs: Remove unused sysfs code 2011-06-17 14:54:18 -04:00
transaction.c Btrfs: change how we indicate we're adding csums 2012-07-23 16:27:55 -04:00
transaction.h Btrfs: change how we indicate we're adding csums 2012-07-23 16:27:55 -04:00
tree-defrag.c btrfs: drop unused parameter from btrfs_release_path 2011-05-02 13:57:22 +02:00
tree-log.c Btrfs: return error of btrfs_update_inode() to caller 2012-07-23 16:27:54 -04:00
tree-log.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ulist.c Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
ulist.h Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
version.h
volumes.c Btrfs: suppress printk() if all device I/O stats are zero 2012-07-23 16:28:07 -04:00
volumes.h Btrfs: add DEVICE_READY ioctl 2012-07-23 16:27:42 -04:00
xattr.c Btrfs: use i_version instead of our own sequence 2012-05-30 10:23:27 -04:00
xattr.h fs/vfs/security: pass last path component to LSM on inode creation 2011-02-01 11:12:29 -05:00
zlib.c btrfs: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:21 +08:00