summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2009-06-02 08:07:59 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-15 09:40:39 -0700
commit288aae5dc647d969724e2a2cb5ce3f6d5f18567c (patch)
tree61b3c1a4cca8dcecd2fcf4e3626d53cd15291f5c /lib
parent85d74145f2ad27963cb2ab6fcbafcc1a172c7a7a (diff)
ext4: Fix race in ext4_inode_info.i_cached_extent
(cherry picked from commit 2ec0ae3acec47f628179ee95fe2c4da01b5e9fc4) 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> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions