aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorSurbhi Palande <surbhi.palande@canonical.com>2009-12-14 09:53:52 -0500
committerTheodore Ts'o <tytso@mit.edu>2009-12-14 09:53:52 -0500
commit034fb4c95fc0fed4ec4a50778127b92c6f2aec01 (patch)
tree663bf0c4d0123f6aeeda8fd7124a5921433101ba /fs/ext4
parent51b7e3c9fbe7d22d4e355101e9a73b44fc5c9feb (diff)
ext4: replace BUG() with return -EIO in ext4_ext_get_blocks
This patch fixes the Kernel BZ #14286. When the address of an extent corresponding to a valid block is corrupted, a -EIO should be reported instead of a BUG(). This situation should not normally not occur except in the case of a corrupted filesystem. If however it does, then the system should not panic directly but depending on the mount time options appropriate action should be taken. If the mount options so permit, the I/O should be gracefully aborted by returning a -EIO. http://bugzilla.kernel.org/show_bug.cgi?id=14286 Signed-off-by: Surbhi Palande <surbhi.palande@canonical.com> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/extents.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 3a7928f825e4..8fd6c567964a 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -3190,7 +3190,13 @@ int ext4_ext_get_blocks(handle_t *handle, struct inode *inode,
3190 * this situation is possible, though, _during_ tree modification; 3190 * this situation is possible, though, _during_ tree modification;
3191 * this is why assert can't be put in ext4_ext_find_extent() 3191 * this is why assert can't be put in ext4_ext_find_extent()
3192 */ 3192 */
3193 BUG_ON(path[depth].p_ext == NULL && depth != 0); 3193 if (path[depth].p_ext == NULL && depth != 0) {
3194 ext4_error(inode->i_sb, __func__, "bad extent address "
3195 "inode: %lu, iblock: %d, depth: %d",
3196 inode->i_ino, iblock, depth);
3197 err = -EIO;
3198 goto out2;
3199 }
3194 eh = path[depth].p_hdr; 3200 eh = path[depth].p_hdr;
3195 3201
3196 ex = path[depth].p_ext; 3202 ex = path[depth].p_ext;