On Thu, 2005-02-03 at 11:37 -0500, Guerra, Jim wrote: > Shaggy - > > we just had a system crash with the following kernel messages > > > Feb 2 15:40:26 va008 kernel: c016337b > Feb 2 15:40:26 va008 kernel: PREEMPT SMP > Feb 2 15:40:26 va008 kernel: Modules linked in: dm_mod > Feb 2 15:40:26 va008 kernel: CPU: 3 > Feb 2 15:40:26 va008 kernel: EIP: 0060:[bd_forget+43/96] Not tainted > VLI > Feb 2 15:40:26 va008 kernel: EIP: 0060:[<c016337b>] Not tainted VLI > Feb 2 15:40:26 va008 kernel: EFLAGS: 00010206 (2.6.10) > Feb 2 15:40:26 va008 kernel: EIP is at bd_forget+0x2b/0x60
I haven't seen a crash like this before. I'm guessing that maybe inode->i_devices might have gotten corrupted, but I don't know for sure. bd_forget doesn't do too much. > after we rebooted fsck.jfs came back with > > > fsck.jfs version 1.1.7, 22-Jul-2004 > processing started: 2/3/2005 11.20.38 > The current device is: /dev/vg00/lv00 > Open(...READ/WRITE EXCLUSIVE...) returned rc = 0 > Primary superblock is valid. > The type of file system for the device is JFS. > Block size in bytes: 4096 > Filesystem size in blocks: 731791360 > **Phase 0 - Replay Journal Log > LOGREDO: Log already redone! > logredo returned rc = 0 > **Phase 1 - Check Blocks, Files/Directories, and Directory Entries > Primary metadata inode A16 is corrupt. > Errors detected in the Primary File/Directory Allocation Table. > Duplicate reference to 4 block(s) beginning at offset 3876468 found in file > system object IA16. > Inode A16 has references to cross linked blocks. > Multiple metadata references to 4 blocks beginning at offset 3876468 have > been detected. > Duplicate block references have been detected in Metadata. CANNOT CONTINUE. > Filesystem is dirty. > processing terminated: 2/3/2005 11:24:13 with return code: 0 exit code: > 4. > > > how can I fix the problem ? This one's pretty ugly. I'm not sure how this could have happened, but this little patch might be able to salvage the partition. This is a special case to fix this specific partition. After running the patched version of jfs_fsck, throw it away. It will always invalidate an inode extent beginning at block 3876468. I once sent a similar patch to someone, but I never heard back whether or not it worked. :^( If it helps, maybe I can do something to make fsck do this kind of thing automatically. Good Luck, Shaggy -- David Kleikamp IBM Linux Technology Center
diff -urp jfsutils-1.1.7/fsck/fsckwsp.c jfsutils-jguerra/fsck/fsckwsp.c --- jfsutils-1.1.7/fsck/fsckwsp.c 2004-04-28 13:58:42.000000000 -0500 +++ jfsutils-jguerra/fsck/fsckwsp.c 2005-02-03 12:57:15.000000000 -0600 @@ -3157,6 +3157,17 @@ int process_extent(struct fsck_inode_rec ? agg_recptr->highest_valid_fset_datablk : extent_addr + extent_length - 1; + /* + * Special case to fix jguerra's file system + */ + if (extent_addr == 3876468) { + *adjusted_length = 0; + *extent_is_valid = 0; + agg_recptr->corrections_needed = 1; + + return FSCK_OK; + } + if (((first_valid > agg_recptr->highest_valid_fset_datablk) && (inorecptr->inode_type != metadata_inode)) || /*