aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2008-10-06 21:35:40 -0400
committerTheodore Ts'o <tytso@mit.edu>2008-10-06 21:35:40 -0400
commit914258bf2cb22bf4336a1b1d90c551b4b11ca5aa (patch)
tree66a3068b53059154b4584166c4b2ce90ae833b42 /fs/ext4
parent730c213c79a638137b47a90624e4bac252f07ae7 (diff)
ext4/jbd2: Avoid WARN() messages when failing to write to the superblock
This fixes some very common warnings reported by kerneloops.org Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/super.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 8175318abd84..fb5766e2bffe 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2810,13 +2810,34 @@ static void ext4_commit_super(struct super_block *sb,
2810 2810
2811 if (!sbh) 2811 if (!sbh)
2812 return; 2812 return;
2813 if (buffer_write_io_error(sbh)) {
2814 /*
2815 * Oh, dear. A previous attempt to write the
2816 * superblock failed. This could happen because the
2817 * USB device was yanked out. Or it could happen to
2818 * be a transient write error and maybe the block will
2819 * be remapped. Nothing we can do but to retry the
2820 * write and hope for the best.
2821 */
2822 printk(KERN_ERR "ext4: previous I/O error to "
2823 "superblock detected for %s.\n", sb->s_id);
2824 clear_buffer_write_io_error(sbh);
2825 set_buffer_uptodate(sbh);
2826 }
2813 es->s_wtime = cpu_to_le32(get_seconds()); 2827 es->s_wtime = cpu_to_le32(get_seconds());
2814 ext4_free_blocks_count_set(es, ext4_count_free_blocks(sb)); 2828 ext4_free_blocks_count_set(es, ext4_count_free_blocks(sb));
2815 es->s_free_inodes_count = cpu_to_le32(ext4_count_free_inodes(sb)); 2829 es->s_free_inodes_count = cpu_to_le32(ext4_count_free_inodes(sb));
2816 BUFFER_TRACE(sbh, "marking dirty"); 2830 BUFFER_TRACE(sbh, "marking dirty");
2817 mark_buffer_dirty(sbh); 2831 mark_buffer_dirty(sbh);
2818 if (sync) 2832 if (sync) {
2819 sync_dirty_buffer(sbh); 2833 sync_dirty_buffer(sbh);
2834 if (buffer_write_io_error(sbh)) {
2835 printk(KERN_ERR "ext4: I/O error while writing "
2836 "superblock for %s.\n", sb->s_id);
2837 clear_buffer_write_io_error(sbh);
2838 set_buffer_uptodate(sbh);
2839 }
2840 }
2820} 2841}
2821 2842
2822 2843