kernel panic

jan markus markus.jan na seznam.cz
Pátek Leden 5 20:59:00 CET 2007


Miroslav Kolombo wrote:
> Z toho my vychazi jednoznacny zaver:
> nastavim jako default jadro, co bylo na instalacnich mediich a pockam na 
> nejblizsi upgrade kernelu.
> 
> Nebo je tahle uvaha spatne?

inu, tot otazka...

upozornuji, ze me nasledujici zavery jsou: nudne, evidentne nespravne,
zavadejici, a v kazdem pripade ukazkou cireho diletantstvi

nuze pojdme na to... ;)

mrknul jsem na:
http://isoredirect.centos.org/centos/4.4/

a stahl odsud "defaultni" jadro kernel-2.6.9-42.EL.src.rpm a
"aktualizovane" jadro kernel-2.6.9-42.0.3.EL.src.rpm

rozbalil a zkoumal zdojaky & zaplaty a porovnaval (moc to neslo) s
ukazkou te "opravne" zaplaty na http://lkml.org/lkml/2003/2/23/156

neco z te opravne zaplaty uz implementovano je, neco ne. kazdopadne jsem
zjistil (pomoci md5sum), ze soubory net/ipv4/icmp.c a net/core/sock.c
jsou identicke v obou jadrech. nejspis tedy nema smysl vracet se k
implicitnimu jadru distribuce, nebot zrejme trpi stejnou vadou, jako
jadro aktualizovane

stoural jsem se v tom, z rozmaru, dal a zameril se na tu konkretni
chybu, kterou jste posilal:

   Kernel panic - not syncing: net/ipv4/icmp.c:252:spin_unlock
   (net/core/sock.c:cf989aa0) not locked

na inkriminovanem radku icmp.c:252 se naleza toto:

static void icmp_xmit_unlock(void)
{
         spin_unlock_bh(&icmp_socket->sk->sk_lock.slock);
}

hmm... tedy zrejme se to snazilo odemknout cosi, co nebylo zamceno.

v te zaplate z lkml.org je tato fukce "opravena" nejak takto:

static void icmp_xmit_unlock(void)
{
         if(unlikely(!spin_trylock(&icmp_socket->sk->sk_lock.slock)))
             BUG();
}

;) coz tusim v podstate zpusobi jen trochu jiny vypis chyby, ktery jste
posilal a potom to rovnez zpanikari.

takze jak to tak vypada, nasel jste v jadre chybicku. v jake podobe a
komu ji oznamit, to vam bohuzel nepovim

pokud nechcete, aby to priste znovu padlo na ***, mozna by pomohla
nasledujici uprava:

static void icmp_xmit_unlock(void)
{
         if(spin_trylock(&icmp_socket->sk->sk_lock.slock))
             spin_unlock_bh(&icmp_socket->sk->sk_lock.slock);
}

ale co se stane potom, kdo vi...

je zde nicmene jeste jedna varianta, a totiz, ze jsem vedle jak ta
jedle, a ze mi ted bude nekym nalozeno na zada jak zaslouzim ;)
inu, kdo chce kam...

s pozdravem a pranim vseho dobreho,
-honza




Další informace o konferenci Linux