提交 e3570639 编写于 作者: E Eric Sandeen 提交者: Theodore Ts'o

ext4: don't print scary messages for allocation failures post-abort

I often get emails containing the "This should not happen!!" message,
conveniently trimmed to remove things like:

sd 0:0:0:0: [sda] Unhandled error code
sd 0:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT
sd 0:0:0:0: [sda] CDB: Write(10): 2a 00 03 13 c9 70 00 00 28 00
end_request: I/O error, dev sda, sector 51628400
Aborting journal on device dm-0-8.
EXT4-fs error (device dm-0): ext4_journal_start_sb: Detected aborted journal
EXT4-fs (dm-0): Remounting filesystem read-only

I don't think there is any value to the verbosity if the reason is
due to a filesystem abort; it just obfuscates the root cause.
Signed-off-by: NEric Sandeen <sandeen@redhat.com>
Signed-off-by: N"Theodore Ts'o" <tytso@mit.edu>
上级 d889dc83
...@@ -2228,6 +2228,8 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd) ...@@ -2228,6 +2228,8 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd)
blks = ext4_map_blocks(handle, mpd->inode, &map, get_blocks_flags); blks = ext4_map_blocks(handle, mpd->inode, &map, get_blocks_flags);
if (blks < 0) { if (blks < 0) {
struct super_block *sb = mpd->inode->i_sb;
err = blks; err = blks;
/* /*
* If get block returns with error we simply * If get block returns with error we simply
...@@ -2238,7 +2240,7 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd) ...@@ -2238,7 +2240,7 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd)
return 0; return 0;
if (err == -ENOSPC && if (err == -ENOSPC &&
ext4_count_free_blocks(mpd->inode->i_sb)) { ext4_count_free_blocks(sb)) {
mpd->retval = err; mpd->retval = err;
return 0; return 0;
} }
...@@ -2250,16 +2252,17 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd) ...@@ -2250,16 +2252,17 @@ static int mpage_da_map_blocks(struct mpage_da_data *mpd)
* writepage and writepages will again try to write * writepage and writepages will again try to write
* the same. * the same.
*/ */
ext4_msg(mpd->inode->i_sb, KERN_CRIT, if (!(EXT4_SB(sb)->s_mount_flags & EXT4_MF_FS_ABORTED)) {
"delayed block allocation failed for inode %lu at " ext4_msg(sb, KERN_CRIT,
"logical offset %llu with max blocks %zd with " "delayed block allocation failed for inode %lu "
"error %d", mpd->inode->i_ino, "at logical offset %llu with max blocks %zd "
(unsigned long long) next, "with error %d", mpd->inode->i_ino,
mpd->b_size >> mpd->inode->i_blkbits, err); (unsigned long long) next,
printk(KERN_CRIT "This should not happen!! " mpd->b_size >> mpd->inode->i_blkbits, err);
"Data will be lost\n"); ext4_msg(sb, KERN_CRIT,
if (err == -ENOSPC) { "This should not happen!! Data will be lost\n");
ext4_print_free_blocks(mpd->inode); if (err == -ENOSPC)
ext4_print_free_blocks(mpd->inode);
} }
/* invalidate all the pages */ /* invalidate all the pages */
ext4_da_block_invalidatepages(mpd, next, ext4_da_block_invalidatepages(mpd, next,
......
...@@ -3884,6 +3884,9 @@ static void ext4_mb_show_ac(struct ext4_allocation_context *ac) ...@@ -3884,6 +3884,9 @@ static void ext4_mb_show_ac(struct ext4_allocation_context *ac)
struct super_block *sb = ac->ac_sb; struct super_block *sb = ac->ac_sb;
ext4_group_t ngroups, i; ext4_group_t ngroups, i;
if (EXT4_SB(sb)->s_mount_flags & EXT4_MF_FS_ABORTED)
return;
printk(KERN_ERR "EXT4-fs: Can't allocate:" printk(KERN_ERR "EXT4-fs: Can't allocate:"
" Allocation context details:\n"); " Allocation context details:\n");
printk(KERN_ERR "EXT4-fs: status %d flags %d\n", printk(KERN_ERR "EXT4-fs: status %d flags %d\n",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册