linux/fs/ext4
Theodore Ts'o 2ec0ae3ace ext4: Fix race in ext4_inode_info.i_cached_extent
If two CPU's simultaneously call ext4_ext_get_blocks() at the same
time, there is nothing protecting the i_cached_extent structure from
being used and updated at the same time.  This could potentially cause
the wrong location on disk to be read or written to, including
potentially causing the corruption of the block group descriptors
and/or inode table.

This bug has been in the ext4 code since almost the very beginning of
ext4's development.  Fortunately once the data is stored in the page
cache cache, ext4_get_blocks() doesn't need to be called, so trying to
replicate this problem to the point where we could identify its root
cause was *extremely* difficult.  Many thanks to Kevin Shanahan for
working over several months to be able to reproduce this easily so we
could finally nail down the cause of the corruption.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reviewed-by: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
2009-05-15 09:07:28 -04:00
..
acl.c New helper - current_umask() 2009-03-31 23:00:26 -04:00
acl.h ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00
balloc.c ext4: Use lowercase names of quota functions 2009-03-26 02:18:36 +01:00
bitmap.c ext4: Change unsigned long to unsigned int 2008-11-05 00:14:04 -05:00
dir.c ext4: New rec_len encoding for very large blocksizes 2009-02-14 23:01:36 -05:00
ext4.h Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4 2009-04-01 10:57:49 -07:00
ext4_extents.h ext4: Validate extent details only when read from the disk 2009-03-27 16:39:58 -04:00
ext4_i.h ext4: New inode/block allocation algorithms for flex_bg filesystems 2009-03-12 12:18:34 -04:00
ext4_jbd2.c ext4: Allow ext4 to run without a journal 2009-01-07 00:06:22 -05:00
ext4_jbd2.h ext4: Remove "extents" mount option 2009-01-06 14:53:16 -05:00
ext4_sb.h ext4: Add sysfs support 2009-03-31 09:10:09 -04:00
extents.c ext4: Fix race in ext4_inode_info.i_cached_extent 2009-05-15 09:07:28 -04:00
file.c ext4: Fix discard of inode prealloc space with delayed allocation. 2009-03-27 22:36:43 -04:00
fsync.c ext4: Add debugging markers that can be used by systemtap 2008-10-05 20:50:06 -04:00
group.h ext4: Rename read_block_bitmap() to ext4_read_block_bitmap() 2008-07-11 19:27:31 -04:00
hash.c ext4: Add support for non-native signed/unsigned htree hash algorithms 2008-10-28 13:21:44 -04:00
ialloc.c ext4: Fix potential inode allocation soft lockup in Orlov allocator 2009-04-22 21:00:36 -04:00
inode.c ext4: Clear the unwritten buffer_head flag after the extent is initialized 2009-05-14 17:05:39 -04:00
ioctl.c ext4: add EXT4_IOC_ALLOC_DA_BLKS ioctl 2009-02-26 01:04:07 -05:00
Kconfig trivial: fix typos/grammar errors in Kconfig texts 2009-03-30 15:22:01 +02:00
Makefile ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00
mballoc.c ext4: fix locking typo in mballoc which could cause soft lockup hangs 2009-03-27 19:43:21 -04:00
mballoc.h ext4: Rename pa_linear to pa_type 2009-03-27 17:16:58 -04:00
migrate.c ext4: Fix NULL dereference in ext4_ext_migrate()'s error handling 2009-02-15 20:02:19 -05:00
namei.c ext4: Use lowercase names of quota functions 2009-03-26 02:18:36 +01:00
namei.h
resize.c ext4: Use atomic_t's in struct flex_groups 2009-03-04 19:09:10 -05:00
super.c ext4: check block device size on mount 2009-04-07 14:07:47 -04:00
symlink.c ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00
xattr.c ext4: Use lowercase names of quota functions 2009-03-26 02:18:36 +01:00
xattr.h ext4: Rename ext4dev to ext4 2008-10-10 20:02:48 -04:00
xattr_security.c ext4: move headers out of include/linux 2008-04-29 18:13:32 -04:00
xattr_trusted.c ext4: remove double definitions of xattr macros 2008-07-11 19:27:31 -04:00
xattr_user.c ext4: remove double definitions of xattr macros 2008-07-11 19:27:31 -04:00