[OpenAFS] Re: 1.4.12fc1 kernel panics

Derrick Brashear shadow@gmail.com
Sat, 16 Jan 2010 19:35:41 -0500


2 very minor errors.

> =A0 mkdir /tmp/symbols
> =A0 kextutil -n -s /tmp/symbols /var/db/openafs/etc/afs.kext
> =A0 cp -R /var/db/openafs/etc/afs.kext /tmp/symbols
> =A0 gdb --arch=3Di386 /mach_kernel
> =A0 (gdb) add_kext /tmp/symbols/afs.kext

technically, it's add-kext. I don't know if add_kext works.

> =A0 (gdb) disassemble afs_GetDCache
> )
>
> We're relatively lucky here, as near the panic location is a call to rx_E=
ndCall(), the last of 2 that occur in that GetDCache.

The 2nd of 3. The analysis otherwise holds.

> Lining this up with the corresponding source code, the last call to rx_En=
dCall occurs at line 2219 of afs_dcache.c, which looks something like:
>
> =A0 =A0if (length > size) {
> =A0 =A0 =A0 =A0/* The fileserver told us it is going to send more data
> =A0 =A0 =A0 =A0 * than we requested. It shouldn't do that, and
> =A0 =A0 =A0 =A0 * accepting that much data can make us take up more
> =A0 =A0 =A0 =A0 * cache space than we're supposed to, so error. */
> =A0 =A0 =A0 =A0code =3D rx_Error(tcall);
> =A0 =A0 =A0 =A0RX_AFS_GUNLOCK();
> =A0 =A0 =A0 =A0code1 =3D rx_EndCall(tcall, code);
> =A0 =A0 =A0 =A0RX_AFS_GLOCK();
> =A0 =A0 =A0 =A0tcall =3D (struct rx_call *)0;
> =A0 =A0 =A0 =A0code =3D EIO;
> =A0 =A0}
>