2002-04-02 08:51:23

by Stephen Oberholtzer

[permalink] [raw]
Subject: 2.5.7 & reiserfs[-related] oops?

I downloaded (rather slowly at that -- 5kb/sec, i need dsl!) 2.5.7.
I configured it using my old config from 2.4.13-ac<something>:
cp ../linux-2.4.13-ac<something>/.config
yes ''|make oldconfig
make menuconfig
and tweaked a few things (among them, enabling preempting).
After disabling a few of the modular items that no longer worked (i2o, firewire), I built, lilo'ed, and booted...

almost.

----

Unable to handle kernel NULL pointer dereference at virtual address 00000010
printing eip:
c01366ee
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01366ee>] Not tainted
EFLAGS: 0010286
eax: 00001000 ebx: 0000000e ecx: 00000008 edx: 00002012
esi: 00000008 edi: 00002012 ebp: 00000000 esp: c12cfd78
ds: 0018 es: 0018 ss: 0018
Process swapper (pid: 1, threadinfo=c12ce000 task=c12cc040)
Stack: 00001000 00002012 00000000 c1376800 c1376800 c0136d98 00000000 00002012
00001000 c1376800 d180b000 d181c3ec c0136f9f 00000000 00002012 00001000
c1376800 c01769e6 00000000 00002012 00001000 00000302 00000000 c1376954

Call Trace: [<c0136d98>] [<c0136f9f>] [<c01769e6>] [<c0135ec0>] [<c0169068>]
[<c016992c>] [<c018062c>] [<c013b659>] [<c013a300>] [<c0169d0f>] [<c0169808>]
[<c013a4d0>] [<c014b0f9>] [<c014b3d0>] [<c014b214>] [<c014b7f0>] [<c010527d>]
[<c0105073>] [<c0106fac>]

Code: 0f b7 45 10 b0 00 66 0f b6 55 10 01 d0 0f b7 c0 89 44 24 10
<0>Kernel panic: Attempted to kill init! <- always fun

------------------------------
after fighting with libiberty, libbfd, and ksymoops, i was able to produce the following
------------------------------

ksymoops 2.4.5 on i686 2.4.13-ac5. Options used
-v /usr/src/linux-2.5.7/vmlinux (specified)
-K (specified)
-L (specified)
-o /lib/modules/2.4.13-ac5/ (default)
-m /boot/System.map-2.5.7 (specified)
No modules in ksyms, skipping objects
Unable to handle kernel NULL pointer dereference at virtual address 00000010
c01366ee
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01366ee>] Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 0010286
eax: 00001000 ebx: 0000000e ecx: 00000008 edx: 00002012
esi: 00000008 edi: 00002012 ebp: 00000000 esp: c12cfd78
ds: 0018 es: 0018 ss: 0018
Stack: 00001000 00002012 00000000 c1376800 c1376800 c0136d98 00000000 00002012
00001000 c1376800 d180b000 d181c3ec c0136f9f 00000000 00002012 00001000
c1376800 c01769e6 00000000 00002012 00001000 00000302 00000000 c1376954
Call trace: [<c0136d98>] [<c0136f9f>] [<c01769e6>] [<c0135ec0>] [<c0169068>]
[<c016992c>] [<c018062c>] [<c013b659>] [<c013a300>] [<c0169d0f>] [<c0169808>]
[<c013a4d0>] [<c014b0f9>] [<c014b3d0>] [<c014b214>] [<c014b7f0>] [<c010527d>]
[<c0105073>] [<c0106fac>]
Code: 0f b7 45 10 b0 00 66 0f b6 55 10 01 d0 0f b7 c0 89 44 24 10
Error (Oops_bfd_perror): set_section_contents Bad value

>>EIP; c01366ee <__get_hash_table+1a/bc> <=====
>>eax; 00001000 Before first symbol
>>edx; 00002012 Before first symbol
>>edi; 00002012 Before first symbol
>>esp; c12cfd78 <END_OF_CODE+fbc0ec/????>
Trace; c0136d98 <__getblk+1c/40>
Trace; c0136f9f <__bread+17/70>
Trace; c01769e6 <journal_init+de/68c>
Trace; c0135ec0 <__wait_on_buffer+84/90>
Trace; c0169068 <read_bitmaps+cc/164>
Trace; c016992c <reiserfs_fill_super+124/49c>
Trace; c018062c <sprintf+14/18>
Trace; c013b659 <bdevname+31/3a>
Trace; c013a300 <get_sb_bdev+1f4/258>
Trace; c0169d0f <reiserfs_get_sb+1f/24>
Trace; c0169808 <reiserfs_fill_super+0/49c>
Trace; c013a4d0 <do_kern_mount+50/cc>
Trace; c014b0f9 <do_add_mount+6d/13c>
Trace; c014b3d0 <do_mount+16c/188>
Trace; c014b214 <copy_mount_options+4c/9c>
Trace; c014b7f0 <sys_mount+a4/110>
Trace; c010527d <prepare_namespace+cd/108>
Trace; c0105073 <init+23/160>
Trace; c0106fac <kernel_thread+28/38>
<0>Kernel panic: Attempted to kill init!
1 error issued. Results may not be reliable.

-----

I don't know what the error meant ("set_section_contents Bad value"), sorry.

-----

I looked at buffer.c's __get_hash_table.

In an effort to prove my complete incompetence, I threw in a printk:

printk( KERN_ERR "__get_hash_table(%p, %d, %d)\n", bdev, block, size );

i see this before the oops:

___get_hash_table(c1345120, <incremental numbers>, 4096)
___get_hash_table(c1345120, <incremental numbers>, 4096)
^^ lots of above. the 'incremental numbers' come in pairs.
___get_hash_table(c1345120, 589824, 4096) <- 0x90000
___get_hash_table(c1345120, 589824, 4096)
___get_hash_table(c1345120, 622592, 4096) <- 0x98000
___get_hash_table(c1345120, 622592, 4096)
___get_hash_table(c1345120, 655360, 4096) <- 0xA0000
___get_hash_table(c1345120, 655360, 4096)
___get_hash_table(00000000, 8210, 4096) <- 0x1FB8!? Breaks the pattern...

Unforunately, I don't seem to be able to get any more information; sorry :(

I guess it could be worse... could be trashing the partition it would be trying to load...





--
Stevie-O

Real programmers use COPY CON PROGRAM.EXE


2002-04-02 14:59:42

by Chris Mason

[permalink] [raw]
Subject: Re: 2.5.7 & reiserfs[-related] oops?

On Tue, 2002-04-02 at 03:45, Stevie O wrote:
> I downloaded (rather slowly at that -- 5kb/sec, i need dsl!) 2.5.7.
> I configured it using my old config from 2.4.13-ac<something>:
> cp ../linux-2.4.13-ac<something>/.config
> yes ''|make oldconfig
> make menuconfig
> and tweaked a few things (among them, enabling preempting).
> After disabling a few of the modular items that no longer worked (i2o, firewire), I built, lilo'ed, and booted...
>

You need the patch below (from Oleg Drokin) to fix this oops, but there
is also a problem with the code to finish deletes and truncates after a
crash, and that causes corruption.

For now, I'd suggest commenting out both of the finish_unfinished()
calls in fs/reiserfs/super.c. I've been working on the corruption for a
few days, it's really starting to irk me. For now, I suggest commenting
out both of the finish_unfinished() in fs/reiserfs/super.c

-chris

--- linux-2.5.6/fs/reiserfs/journal.c.orig Tue Mar 12 15:25:27 2002
+++ linux-2.5.6/fs/reiserfs/journal.c Tue Mar 12 15:26:47 2002
@@ -1958,8 +1958,7 @@
SB_ONDISK_JOURNAL_DEVICE( super ) ?
to_kdev_t(SB_ONDISK_JOURNAL_DEVICE( super )) : super -> s_dev;
/* there is no "jdev" option and journal is on separate device */
- if( ( !jdev_name || !jdev_name[ 0 ] ) &&
- SB_ONDISK_JOURNAL_DEVICE( super ) ) {
+ if( ( !jdev_name || !jdev_name[ 0 ] ) ) {
journal -> j_dev_bd = bdget( kdev_t_to_nr( jdev ) );
if( journal -> j_dev_bd )
result = blkdev_get( journal -> j_dev_bd,
@@ -1974,9 +1973,6 @@
return result;
}

- /* no "jdev" option and journal is on the host device */
- if( !jdev_name || !jdev_name[ 0 ] )
- return 0;
journal -> j_dev_file = filp_open( jdev_name, 0, 0 );
if( !IS_ERR( journal -> j_dev_file ) ) {
struct inode *jdev_inode;