| From 55f3892371dc7439f9d18df3c0ed0dd96a31263c Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Tue, 8 Sep 2009 08:21:26 -0400 |
| Subject: [PATCH 21/85] ext4: print more sysadmin-friendly message in check_block_validity() |
| |
| (cherry picked from commit 80e42468d65475e92651e62175bb7807773321d0) |
| |
| Drop the WARN_ON(1), as he stack trace is not appropriate, since it is |
| triggered by file system corruption, and it misleads users into |
| thinking there is a kernel bug. In addition, change the message |
| displayed by ext4_error() to make it clear that this is a file system |
| corruption problem. |
| |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| fs/ext4/inode.c | 16 ++++++++-------- |
| 1 file changed, 8 insertions(+), 8 deletions(-) |
| |
| --- a/fs/ext4/inode.c |
| +++ b/fs/ext4/inode.c |
| @@ -1122,16 +1122,15 @@ static void ext4_da_update_reserve_space |
| ext4_discard_preallocations(inode); |
| } |
| |
| -static int check_block_validity(struct inode *inode, sector_t logical, |
| - sector_t phys, int len) |
| +static int check_block_validity(struct inode *inode, const char *msg, |
| + sector_t logical, sector_t phys, int len) |
| { |
| if (!ext4_data_block_valid(EXT4_SB(inode->i_sb), phys, len)) { |
| - ext4_error(inode->i_sb, "check_block_validity", |
| + ext4_error(inode->i_sb, msg, |
| "inode #%lu logical block %llu mapped to %llu " |
| "(size %d)", inode->i_ino, |
| (unsigned long long) logical, |
| (unsigned long long) phys, len); |
| - WARN_ON(1); |
| return -EIO; |
| } |
| return 0; |
| @@ -1183,8 +1182,8 @@ int ext4_get_blocks(handle_t *handle, st |
| up_read((&EXT4_I(inode)->i_data_sem)); |
| |
| if (retval > 0 && buffer_mapped(bh)) { |
| - int ret = check_block_validity(inode, block, |
| - bh->b_blocknr, retval); |
| + int ret = check_block_validity(inode, "file system corruption", |
| + block, bh->b_blocknr, retval); |
| if (ret != 0) |
| return ret; |
| } |
| @@ -1265,8 +1264,9 @@ int ext4_get_blocks(handle_t *handle, st |
| |
| up_write((&EXT4_I(inode)->i_data_sem)); |
| if (retval > 0 && buffer_mapped(bh)) { |
| - int ret = check_block_validity(inode, block, |
| - bh->b_blocknr, retval); |
| + int ret = check_block_validity(inode, "file system " |
| + "corruption after allocation", |
| + block, bh->b_blocknr, retval); |
| if (ret != 0) |
| return ret; |
| } |