Yet another crash in FreeBSD 5.1
John Baldwin
jhb at FreeBSD.org
Sat Aug 2 21:31:28 PDT 2003
On 03-Aug-2003 Greg 'groggy' Lehey wrote:
> On Saturday, 2 August 2003 at 16:47:13 +0200, Eivind Olsen wrote:
>> --On 2. august 2003 02:11 -0700 Terry Lambert <tlambert2 at mindspring.com>
>> wrote:
>>>> db> trace
>>>> g_dev_strategy(c2156024,c2153800,0,cfb528d0,c2099eca) at
>>>> g_dev_strategy+0x29 launch_requests(c299bf00,0,10000,ffffffff,47) at
>>>> launch_requests+0x448 vinumstart(c5ada2d0,0,c22ab000,cfb5294c,c02e5bc6)
>>>> at vinumstart+0x2b2
>>> gdb -k kernel.debug
>>> (gdb) list *(g_dev_strategy+29)
>>> [ ... ]
>>> (gdb) list *(launch_requests+448)
>>> [ ... ]
>>> (gdb) list *(vinumstart+2b2)
>>> [ ... ]
>>> Will give you the exact source lines involved, assuming you
>>> built a debug kernel.
>>
>> I did. At least I've tried to. :)
>> (I have a kernel.debug which was compiled at the same time as the real
>> kernel I'm using, and it's approx. 30MB in size).
>>
>>> You don't actually need a crash dump to debug a stack traceback.
>>
>> This is what I found by using those commands you mentioned:
>>
>> eivind at vimes:~/tmp/debug > gdb -k kernel.debug
>> GNU gdb 5.2.1 (FreeBSD)
>> Copyright 2002 Free Software Foundation, Inc.
>> GDB is free software, covered by the GNU General Public License, and you are
>> welcome to change it and/or distribute copies of it under certain
>> conditions.
>> Type "show copying" to see the conditions.
>> There is absolutely no warranty for GDB. Type "show warranty" for details.
>> This GDB was configured as "i386-undermydesk-freebsd"...
>> (kgdb) list *(g_dev_strategy+29)
>
> This is almost certainly the wrong function. At the very list you
> should look at the arguments passed to it.
Actually, this line can be very instructive. Since 'bp' is valid
it is probably the bp2 from g_clone_bio() that is NULL. You might
want to ask phk about that one.
>> (kgdb) list *(launch_requests+448)
>> No symbol "launch_requests" in current context.
>> (kgdb) list *(vinumstart+2b2)
>> No symbol "vinumstart" in current context.
>> (kgdb)
>
> Read the links I just sent you. You haven't loaded the Vinum symbols.
Bah, this isn't hard for you to do either:
(gdb) l *(launch_requests+0x448)
0xad58 is in launch_requests (/usr/src/sys/dev/vinum/vinumrequest.c:448).
443 microtime(&rqe->launchtime); /* time we launched this
request */
444 logrq(loginfo_rqe, (union rqinfou) rqe, rq->bp);
445 }
446 #endif
447 /* fire off the request */
448 DEV_STRATEGY(&rqe->b);
449 }
450 }
451 }
452 return 0;
But you knew that. Also, Eivind, you need to use hex, not decimal
offsets from the functions. You might want to redo the g_dev_strategy()
line with 0x29 instead of 29.
--
John Baldwin <jhb at FreeBSD.org> <>< http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!" - http://www.FreeBSD.org/
More information about the freebsd-current
mailing list