2.5.46 ext3 errors
Hi,
Doing a kernel compile, the file system suddenly turned read-only. Following messages appeared in log:
EXT3-fs error (device ide1(22,1)): ext3_new_inode: Free inodes count corrupted in group 688 Aborting journal on device ide1(22,1).ext3_new_inode: aborting transaction: Journal has aborted in __ext3_journal_get_write_access<2>EXT3-fs error (device ide1(22,1)) in ext3_new_inode: Journal has aborted EXT3-fs error (device ide1(22,1)) in ext3_create: Journal has aborted ext3_abort called.
EXT3-fs abort (device ide1(22,1)): ext3_journal_start: Detected aborted journal
Remounting filesystem read-only
Signature · 1 line
Jens Axboe
Quoted 10 lines · Jens Axboe
Hi,
Doing a kernel compile, the file system suddenly turned read-only. Following messages appeared in log:
EXT3-fs error (device
ide1(22,1)):ext3_new_inode: Free inodes count corrupted in group 688 Aborting journal on deviceide1(22,1).ext3_new_inode: aborting transaction: Journal has aborted in __ext3_journal_get_write_access<2>EXT3-fs error (deviceide1(22,1)) inext3_new_inode: Journal has aborted EXT3-fs error (deviceide1(22,1)) inext3_create: Journal has abortedext3_abortcalled.
EXT3-fs abort (deviceide1(22,1)):ext3_journal_start: Detected aborted journal
Remounting filesystem read-only
fsck gave, for that group:
Free inodes count wrong for group #688 (65534, counted=0)
I've got full fsck log if anyone wants to see it, it consists of wrong inode and directory counts only.
Signature · 1 line
Jens Axboe
Quoted 13 lines · On Wed, 6 Nov 2002 09:26:58 +0100 Jens Axboe <[email protected]> wrote:
Quoted 10 lines · Jens Axboe
Hi,
Doing a kernel compile, the file system suddenly turned read-only. Following messages appeared in log:
EXT3-fs error (device
ide1(22,1)):ext3_new_inode: Free inodes count corrupted in group 688 Aborting journal on deviceide1(22,1).ext3_new_inode: aborting transaction: Journal has aborted in __ext3_journal_get_write_access<2>EXT3-fs error (deviceide1(22,1)) inext3_new_inode: Journal has aborted EXT3-fs error (deviceide1(22,1)) inext3_create: Journal has abortedext3_abortcalled.
EXT3-fs abort (deviceide1(22,1)):ext3_journal_start: Detected aborted journal
Remounting filesystem read-only
Quoted 3 lines
fsck gave, for that group:
Free inodes count wrong for group #688 (65534, counted=0)
I got the same error, but on reboot, the journal was played and then the fsck found no errors.
All I did on that filesystem was
log in
make modules_install in a kernel tree
edit a file in the kernel tree (this file had at least two links) make modules - which discovered the files system read only.
After the reboot, the file was as I had changed it, so I lost nothing.
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
I got this same error while running "seq 1000000|xargs touch" in an otherwise empty directory. It got as far as about 20,000 files before the filesystem was remounted ro.
Quoted 19 lines · Jens Axboe
Hi,
Doing a kernel compile, the file system suddenly turned read-only. Following messages appeared in log:
EXT3-fs error (device
ide1(22,1)):ext3_new_inode: Free inodes count corrupted in group 688 Aborting journal on deviceide1(22,1).ext3_new_inode: aborting transaction: Journal has aborted in __ext3_journal_get_write_access<2>EXT3-fs error (deviceide1(22,1)) inext3_new_inode: Journal has aborted EXT3-fs error (deviceide1(22,1)) inext3_create: Journal has abortedext3_abortcalled.
EXT3-fs abort (deviceide1(22,1)):ext3_journal_start: Detected aborted journal
Remounting filesystem read-onlySignature · 7 lines
Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Quoted 5 lines · Maciej Babinski
I got this same error while running "seq 1000000|xargs touch" in an otherwise empty directory. It got as far as about 20,000 files before the filesystem was remounted ro.
Looks like we had some overeager cut-n-paste in the Orlov conversion.
The per-blockgroup inode and directory accounting is being double-accounted for, and we're not journalling the updates...
This should fix it up, but it is untested.
fs/ext3/ialloc.c renamed from fs/ext3/ialloc.c~ext3-inodes-count-fix +3 -16
@@ -227,11 +227,6 @@ static int find_group_dir(struct super_b }if (!best_desc)return -1 ; - best_desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (best_desc->bg_free_inodes_count) -1 ); - best_desc->bg_used_dirs_count = -cpu_to_le16 (le16_to_cpu (best_desc->bg_used_dirs_count) +1 ); -mark_buffer_dirty (best_bh);return best_group; }
@@ -355,14 +350,7 @@ fallback: }return -1 ; - found: - desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (desc->bg_free_inodes_count) -1 ); - desc->bg_used_dirs_count = -cpu_to_le16 (le16_to_cpu (desc->bg_used_dirs_count) +1 ); - sbi->s_dir_count++; -mark_buffer_dirty (bh);return group; }
@@ -410,9 +398,6 @@ static int find_group_other(struct superreturn -1 ; found: - desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (desc->bg_free_inodes_count) -1 ); -mark_buffer_dirty (bh);return group; }
@@ -521,9 +506,11 @@ repeat:if (err) goto fail; gdp->bg_free_inodes_count =cpu_to_le16 (le16_to_cpu (gdp->bg_free_inodes_count) -1 ); -if (S_ISDIR (mode)) +if (S_ISDIR (mode)) { gdp->bg_used_dirs_count =cpu_to_le16 (le16_to_cpu (gdp->bg_used_dirs_count) +1 ); +EXT3_SB (sb)->s_dir_count++; + }BUFFER_TRACE (bh2,"call ext3_journal_dirty_metadata" ); err =ext3_journal_dirty_metadata (handle, bh2);if (err) goto fail;
_
Since I've applied this patch, I can't reproduce the problem. Thanks!
Maciej
Quoted 69 lines
Looks like we had some overeager cut-n-paste in the Orlov conversion.
The per-blockgroup inode and directory accounting is being double-accounted for, and we're not journalling the updates...
This should fix it up, but it is untested.
fs/ext3/ialloc.c renamed from fs/ext3/ialloc.c~ext3-inodes-count-fix +3
-16@@ -227,11 +227,6 @@ static int find_group_dir(struct super_b }if (!best_desc)return -1 ; - best_desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (best_desc->bg_free_inodes_count) -1 ); - best_desc->bg_used_dirs_count = -cpu_to_le16 (le16_to_cpu (best_desc->bg_used_dirs_count) +1 ); -mark_buffer_dirty (best_bh);return best_group; }@@ -355,14 +350,7 @@ fallback: }return -1 ; - found: - desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (desc->bg_free_inodes_count) -1 ); - desc->bg_used_dirs_count = -cpu_to_le16 (le16_to_cpu (desc->bg_used_dirs_count) +1 ); - sbi->s_dir_count++; -mark_buffer_dirty (bh);return group; }@@ -410,9 +398,6 @@ static int find_group_other(struct superreturn -1 ; found: - desc->bg_free_inodes_count = -cpu_to_le16 (le16_to_cpu (desc->bg_free_inodes_count) -1 ); -mark_buffer_dirty (bh);return group; }@@ -521,9 +506,11 @@ repeat:if (err) goto fail; gdp->bg_free_inodes_count =cpu_to_le16 (le16_to_cpu (gdp->bg_free_inodes_count) -1 ); -if (S_ISDIR (mode)) +if (S_ISDIR (mode)) { gdp->bg_used_dirs_count =cpu_to_le16 (le16_to_cpu (gdp->bg_used_dirs_count) +1 ); +EXT3_SB (sb)->s_dir_count++; + }BUFFER_TRACE (bh2,"call ext3_journal_dirty_metadata" ); err =ext3_journal_dirty_metadata (handle, bh2);if (err) goto fail;_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/