2.1.110: Oops while executing quotaon

Carsten Gross (carsten@sol.wohnheim.uni-ulm.de)
Fri, 24 Jul 1998 14:56:18 +0200 (MET DST)


Hello everybody!

Linux Kernel 2.1.110 oopses while executing "quotaon". It is compiled for
SMP and using diskquotas. No problem with quotas in kernel version 2.1.109.

FYI: Adaptec 2940U driver 5.1.0pre4, /proc/version:
Linux version 2.1.110 (install@python) (gcc version egcs-2.90.29 980515
(egcs-1.0.3 release)) #4 SMP Fri Jul 24 13:54:19 MET DST 1998

This is the oops (sorry for long lines):

Unable to handle kernel NULL pointer dereference at virtual address 00000008
current->tss.cr3 = 03e66000, Tr3 = 03e66000
*pde = 00000000
Oops: 0000
CPU: 1
EIP: 0010:[<c013bf6b>]
EFLAGS: 00010286
eax: 00000000 ebx: 00000004 ecx: c0240000 edx: c02454e8
esi: c0264b60 edi: 00000001 ebp: 00000828 esp: c3e6df5c
ds: 0018 es: 0018 ss: 0018
Process quotaon (pid: 52, process nr: 7, stackpage=c3e6d000)
Stack: 00000004 00000004 c3f7d700 c3bb9d00 c013d473 00000828 00000001 c3b76aa0
00006000 00000100 ffffffea 00000001 00000000 c3f6d1e0 08280001 c013d6e3
00000828 00000001 0804b1f0 c3e6c000 0804b1f0 4009aa44 bffffd68 08280000
Call Trace: [<c013d473>] [<c013d6e3>] [<c0109fe8>]
Code: 8b 58 08 85 db 74 2a 66 39 6b 20 75 24 f6 46 10 02 74 1e 8b

And this the offending code disassembled with ksymoops:
Using /boot/System.map-2.1.110' to map addresses to symbols.

>>EIP: c013bf6b <add_dquot_ref+1b/58>
Trace: c013d473 <quota_on+21b/280>
Trace: c013d6e3 <sys_quotactl+20b/350>
Trace: c0109fe8 <system_call+38/40>
Code: c013bf6b <add_dquot_ref+1b/58>
Code: c013bf6b <add_dquot_ref+1b/58> 8b 58 08 movl 0x8(%eax),%ebx
Code: c013bf6e <add_dquot_ref+1e/58> 85 db testl %ebx,%ebx
Code: c013bf70 <add_dquot_ref+20/58> 74 2a je c013bf9c <add_dquot_ref+4c/58>
Code: c013bf72 <add_dquot_ref+22/58> 66 39 6b 20 cmpw %bp,0x20(%ebx)
Code: c013bf76 <add_dquot_ref+26/58> 75 24 jne c013bf9c <add_dquot_ref+4c/58>
Code: c013bf78 <add_dquot_ref+28/58> f6 46 10 02 testb $0x2,0x10(%esi)
Code: c013bf7c <add_dquot_ref+2c/58> 74 1e je c013bf9c <add_dquot_ref+4c/58>
Code: c013bf7e <add_dquot_ref+2e/58> 8b 00 movl (%eax),%eax
Code: c013bf80 <add_dquot_ref+30/58> 90 nop
Code: c013bf81 <add_dquot_ref+31/58> 90 nop
Code: c013bf82 <add_dquot_ref+32/58> 90 nop

After the Oops I've compiled the file dquot.c with debugging turned on.
objdump tells me:

inode = filp->f_dentry->d_inode;
a2c: 8b 46 08 movl 0x8(%esi),%eax

# This next line is it ! #

a2f: 8b 58 08 movl 0x8(%eax),%ebx
if (!inode || inode->i_dev != dev)
a32: 85 db testl %ebx,%ebx
a34: 74 2a je a60 <add_dquot_ref+0x4c>
a36: 66 39 6b 20 cmpw %bp,0x20(%ebx)
a3a: 75 24 jne a60 <add_dquot_ref+0x4c>
continue;
if (filp->f_mode & FMODE_WRITE && inode->i_sb &&
inode->i_sb->dq_op) {

Thanks a lot for your help.

Regards

Carsten

-- 
Linux, WinNT and MS-DOS. The Good, The Bad and The Ugly
Carsten Gross                          carsten@sol.wohnheim.uni-ulm.de
Wohnheim Heilmeyersteige             Sebastian Kneipp Weg 6, 89075 Ulm

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.altern.org/andrebalsa/doc/lkml-faq.html