Panic im Dummynet-Code

From: Eike Bernhardt <eike(at)unorganized.net>
Date: Mon, 7 Feb 2005 12:14:24 +0100

Moin!

Ich habe hier einen Server, der sich seit neustem immer mal wieder
rebootet hat. Ueber die serielle Konsole konnte ich dann rausfinden, das
er sich aufgrund einer Panic neu startet.

Der Kernel steigt immer im Dummynet-Code aus, das ist auch tatsaechlich
eine Stelle an der es kuerzlich eine Aenderung bei uns auf dem Server
gegeben hat, es wird nun halbstuendlich an den Dummynet-Pipes
herumgestellt um Benutzer zeitnah ins Shaping einzubauen.
Anscheinend mache ich dabei etwas, das dem Dummynet-Code nicht gefaellt.

Ich bin nun grade dabei, lt. Developer Handbuch alle Informationen zu
sammeln die ich wohl fuer einen ordentlich Bug-Report brauche, bin mir
aber nicht so ganz sicher ob ich alles richtig machen.

Das System ist ein 4-stable vom 4.2.2005, ich habe jetzt einen
Debug-Kernel installiert und crashdumps aktiviert, was mich auch
informationen liefert:

--8<--
IdlePTD at physical address 0x0037b000
initial pcb at physical address 0x002df260
panicstr: page fault
panic messages:

---
Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x8001c
fault code              = supervisor read, page not present
instruction pointer     = 0x8:0xc01b0e31
stack pointer           = 0x10:0xdb17fca0
frame pointer           = 0x10:0xdb17fcac
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         = 7555 (sh)
interrupt mask          = net tty
trap number             = 12
panic: page fault
syncing disks... 29 1
done
Uptime: 9h16m5s
-->8--
Der Instruction Pointer ist nun ueber mehrere Panics hinweg der gleiche:
--8<--
(kgdb) list *0xc01b0e31
0xc01b0e31 is in transmit_event (/usr/home/stable/src/sys/netinet/ip_dummynet.c:484).
479                 printf("dummynet: bad switch %d!\n", pkt->dn_dir);
480                 m_freem(pkt->dn_m);
481                 break ;
482             }
483             free(pkt, M_DUMMYNET);
484         }
485         /* if there are leftover packets, put into the heap for next event */
486         if ( (pkt = pipe->head) )
487              heap_insert(&extract_heap, pkt->output_time, pipe ) ;
488         /* XXX should check errors on heap_insert, by draining the
(kgdb)
-->8--
Ich bin mir nun nur unsicher, ob denn da in Zeile 484 wirklich ein Panic
passieren kann, weil das ist ja nur die schliessende Klammer?
Waere nett wenn mir da jemand mal kurz sagen koennte ob die
Informationen so sinnvoll aussehen, oder ob noch irgendwas falsch laeuft
und ich noch was aendern muss.
Danke schonmal,
  Eike
-- 
Eike Bernhardt              http://unorganized.net/                ICQ: 11256658
      The nice thing about standards is that there are so many of them to
      choose from.                                 -- Andrew S. Tanenbaum
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 07 Feb 2005 - 12:23:35 CET

search this site