Panic when removing a SCSI device entry
Joerg Wunsch
freebsd-scsi at uriah.heep.sax.de
Sun May 8 10:45:45 UTC 2011
As Kostik Belousov wrote:
> > and it's the indirection of *(dev)->si_siblings.le_prev that hits a
> > NULL pointer. Obviously, LIST_REMOVE doesn't anticipate that
> Is it NULL pointer dereference ? See below.
Yes, the fault address in the page fault is 0.
> Please provide the full printout from the panic. Also, it would
> be useful to get the dump and do "p *dev" from the frame of
> destroy_devl(). I might need further information after the requested
> data is provided.
Unfortunately, I somehow cannot get the system to provide a coredump.
The dmesg printout from the panic is:
sa0 at sym0 bus 0 scbus1 target 0 lun 0
sa0: <QUANTUM DLT7000 2560> Removable Sequential Access SCSI-2 device
sa0: 20.000MB/s transfers (10.000MHz, offset 15, 16bit)
(sa0:sym0:0:0:0): removing device entry
Fatal trap 12: page fault while in kernel mode
cpuid = 0; apic id = 00
fault virtual address = 0x0
fault code = supervisor write, page not present
instruction pointer = 0x20:0xc052f346
stack pointer = 0x28:0xe98504a0
frame pointer = 0x28:0xe98504c4
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, def32 1, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 52518 (mt)
trap number = 12
panic: page fault
cpuid = 0
Uptime: 1d4h55m31s
(This includes the sa0 device arrival/removal messages.)
The disassembly of the respective part of destroy_devl() is:
0xc052f32e <destroy_devl+30>: test $0x10,%dl
0xc052f331 <destroy_devl+33>: je 0xc052f34c <destroy_devl+60>
0xc052f333 <destroy_devl+35>: mov 0x4c(%esi),%edx
0xc052f336 <destroy_devl+38>: test %edx,%edx
0xc052f338 <destroy_devl+40>: je 0xc052f340 <destroy_devl+48>
0xc052f33a <destroy_devl+42>: mov 0x50(%esi),%eax
0xc052f33d <destroy_devl+45>: mov %eax,0x50(%edx)
0xc052f340 <destroy_devl+48>: mov 0x50(%esi),%edx
0xc052f343 <destroy_devl+51>: mov 0x4c(%esi),%eax
0xc052f346 <destroy_devl+54>: mov %eax,(%edx)
0xc052f348 <destroy_devl+56>: andl $0xffffffef,0x4(%esi)
I could perhaps setup a serial console, so to get at least DDB
functioning if you'd like to see more details. A remote GDB might
also be possible, but will require more work (setting up the
respective environment on a second machine).
> Thing you may try meantime is the following patch.
OK, I'll do that tonight, so let's see how the subsequent nightly
backups proceed.
--
cheers, J"org .-.-. --... ...-- -.. . DL8DTL
http://www.sax.de/~joerg/ NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
More information about the freebsd-scsi
mailing list