[LiSA-Devel] Scoatere driver bonding

Ionut Nicu ionut.nicu at ines.ro
Fri Jun 5 10:09:47 EEST 2009


Salut,

On Thu, 2009-06-04 at 20:03 +0300, Constantin Blanariu wrote:
> Salut!
> 
> Ce ar trebui să se întâmple în momentul în care dispare o interfață
> din switch (ca și cod, funcții apelate) ?
> 
> Adică:
> (config)# int netdev bond0
> CTRL-Z
> #exit
> Apoi scot driverul asociat acelei plăci.
> 

Ar trebui sa se scoata interfata din switch. In switch_init ne
inregistram pentru a primi notificari pentru event-ul NETDEV_UNREGISTER.
Vezi functia sw_netdev_event din sw.c.


> Întreb deoarece dacă dau rmmod și driverul asociat interfeței, se
> blochează. Kernelul nu dă nici un mesaj,
> dar rmmod nu mai răspunde la comenzi și nici cu CTRL-C nu pot ieși.
> După ce fac asta, dacă într-o
> altă consolă dau iar rmmod și driverul, îmi spune driver busy. Dacă
> dau rmmod și modulul de switching,
> tot la fel se blochează.
> 

Hmmm, oops, n-ar fi trebuit sa se intample asta ... :-)

M-am uitat pe cod si am gasit problema:

sw_delif face disable la promiscuous mode: dev_set_promiscuity(dev,-1).
Functia asta trebuie apelata cu rtnl_mutex aquired. Problema e ca si
unregister_netdevice (mai exact functia netdev_wait_allrefs din
net/core/dev.c) face rtnl_lock() inainte sa ne apeleze functia de
notificare. Din functia de notificare apelam sw_delif care vrea sa faca
rtnl_lock, dar mutex-ul fiind deja luat, face deadlock.

Good catch!

Am comis un patch pentru asta pe branch-ul lisa-v2.6.29. L-am testat cu
netdevice-ul dummy. Poti sa-l incerci si tu sa vezi daca iti rezolva
problema?

Bafta,
Ionut.












More information about the LiSA-Devel mailing list