oops in msdos filesystem in 1.3.32

Matthias Sattler (m_sattle@informatik.uni-kl.de)
Tue, 10 Oct 1995 21:04:04 +0100 (MET)


Hiho

Doing a 'find .' in a mounted msdos filesystems give me an oops, but
'ls -lR' works fine. I use 1.3.32 with the kswap patches.

Entry in fstab:
/dev/hda1 /mnt/dos/c msdos defaults,gid=104,umask=007 1 1

Oops: 0002
CPU: 0
EIP: 0010:0015f9cf
EFLAGS: 00010212
eax: 007d5620 ebx: 00d9e700 ecx: 00001918 edx: 00000000
esi: 00d9e700 edi: 00213838 ebp: 00000087 esp: 00544ef8
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process find (pid: 256, process nr: 46, stackpage=00544000)
Stack: 00d9e700 00213838 00000000 00544f78 0a1ad2ad 001a00a8 00e53000 00213838
00000001 0001601b 00e53000 00001918 0093330a 001a1e4f 00133d95 00d9e700
0094f000 00000002 00544f78 00000000 00544fb4 00544f78 00544fb4 0013401a
Call Trace: 001a00a8 001a1e4f 00133d95 0013401a 00134160 00125203 0010adb1
Code: 89 45 00 85 c0 75 97 b8 f3 ff ff ff 5b 5e 5f 5d 83 c4 28 c3

ksymoops output:
Using /System.map' to map addresses to symbols.

>>EIP: 15f9cf <_msdos_lookup+df/280>
Trace: 1a00a8 <_opost+1e8/200>
Trace: 1a1e4f <_write_chan+10f/1f0>
Trace: 133d95 <_lookup+165/180>
Trace: 13401a <__namei+5a/120>
Trace: 134160 <_namei+30/60>
Trace: 125203 <_sys_chdir+13/c0>
Trace: 10adb1 <_system_call+59/a0>

Code: 15f9cf <_msdos_lookup+df/280> movl %eax,0x0(%ebp)
Code: 15f9d2 <_msdos_lookup+e2/280> testl %eax,%eax
Code: 15f9d4 <_msdos_lookup+e4/280> jne ffffff9e
<gcc2_compiled.+ffffff9e>
Code: 15f9d6 <_msdos_lookup+e6/280> movl $0xfffffff3,%eax
Code: 15f9db <_msdos_lookup+eb/280> popl %ebx
Code: 15f9dc <_msdos_lookup+ec/280> popl %esi
Code: 15f9dd <_msdos_lookup+ed/280> popl %edi
Code: 15f9de <_msdos_lookup+ee/280> popl %ebp
Code: 15f9df <_msdos_lookup+ef/280> addl $0x28,%esp
Code: 15f9e2 <_msdos_lookup+f2/280> ret

gdb output for the EIP and the Call Trace:
(gdb) l *0x0015f9cf
0x15f9cf is in msdos_lookup (namei.c:141).
136 }
137 if (len == 2 && name[0] == '.' && name[1] == '.') {
138 ino = msdos_parent_ino(dir,0);
139 iput(dir);
140 if (ino < 0) return ino;
141 if (!(*result = iget(dir->i_sb,ino))) return
-EACCES;
142 return 0;
143 }
144 PRINTK (("msdos_lookup 3\n"));
145 if ((res = msdos_find(dir,name,len,&bh,&de,&ino)) < 0) {
(gdb) l *0x001a00a8
0x1a00a8 is in opost (n_tty.c:155).
150 tty->column++;
151 break;
152 }
153 }
154 tty->driver.put_char(tty, c);
155 return 0;
156 }
157
158 static inline void put_char(unsigned char c, struct tty_struct *tty)
159 {
(gdb) l *0x001a1e4f
0x1a1e4f is in write_chan (n_tty.c:943).
938 break;
939 }
940 if (O_OPOST(tty)) {
941 while (nr > 0) {
942 c = get_user(b);
943 if (opost(c, tty) < 0)
944 break;
945 b++; nr--;
946 }
947 if (tty->driver.flush_chars)
(gdb) l *0x00133d95
0x133d95 is in lookup (namei.c:188).
183 }
184 if (!len) {
185 *result = dir;
186 return 0;
187 }
188 return dir->i_op->lookup(dir,name,len,result);
189 }
190
191 int follow_link(struct inode * dir, struct inode * inode,
192 int flag, int mode, struct inode ** res_inode)
(gdb) l *0x0013401a
0x13401a is in _namei (namei.c:271).
266 *res_inode = NULL;
267 error = dir_namei(pathname,&namelen,&basename,base,&base);
268 if (error)
269 return error;
270 base->i_count++; /* lookup uses up base */
271 error = lookup(base,basename,namelen,&inode);
272 if (error) {
273 iput(base);
274 return error;
275 }
(gdb) l *0x00134160
0x134160 is in namei (namei.c:313).
308 int error;
309 char * tmp;
310
311 error = getname(pathname,&tmp);
312 if (!error) {
313 error = _namei(tmp,NULL,1,res_inode);
314 putname(tmp);
315 }
316 return error;
317 }
(gdb) l *0x00125203
0x125203 is in sys_chdir (open.c:254).
249 asmlinkage int sys_chdir(const char * filename)
250 {
251 struct inode * inode;
252 int error;
253
254 error = namei(filename,&inode);
255 if (error)
256 return error;
257 if (!S_ISDIR(inode->i_mode)) {
258 iput(inode);
(gdb) l *0x0010adb1
No source file for address 0x10adb1.

Matthias

O .---------------. .___________. O
/\/ . `. m_sattle@ ,' / \ +FAX . \/\
__..--- ' /\/ | `._________,' | (___)/ * * \(___) \/ \ ` ---..__
""---__ \/`. | informatik. | / | \ +49 (0)6333 ,'\/ __---""
`.. / | .uni-kl.de | | `...' | -65079 \ ...'
`---------------' `._____.'

--> Don't take life too seriously -- you'll never get out of it alive. <--