From: Guo, M. <mi...@in...> - 2004-05-21 00:51:45
|
The patch is OK for me! you can apply it by yourself. For the blink_remove bug,can you reproduce the bug and send us the back trace log? Another thing is YinHu, who is now a intern in Intel,will contribute the TIPC validation in the future, wish he can get help from you all! Thanks Guo Min tip...@li... wrote: > On Wed, 2004-05-19 at 16:54, Jon Maloy wrote: >> The last thing I did before the port_lock changes was to add >> a device notifier in eth_media, and a "tipc_block_bearer()" >> function to handle this. I tested this with an "ifconfig eth1 >> down/up" (I run dual links most of the time) during traffic, and >> this worked fine, but when I thereafter removed the module I got a >> crash=20 >> in bcast.c/blink_remove(), - a NULL pointer access. >>=20 >> I corrected this (I believed) and tested it, but it seems like I >> have still introduced some problem here. >>=20 >> Maybe Guo or Ling can say more about this ? Pay special >> attention to the flag "blocked" in the bearer, if this gets stuck >> with with the wrong value the traffic will never restart. >>=20 >=20 > Daniel and I sprinkled a few printks around and found an error in > tipc_forward_buf2nameseq. The main problem was that the result from > bcast_port_recv is the message data size but was being checked for > non-zero to be an error. Also the result was only being > checked for the > local delivery, and the prev_destnode was being reset to zero inside > the loop defeating its purpose. Included is a patch that works for > us.=20 >=20 > One other thing, since tipc_forward_buf2nameseq returns the > message data > size, that means that tipc_multicast returns the same. >=20 > cvs diff -u sendbcast.c > Index: sendbcast.c > = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /cvsroot/tipc/source/unstable/net/tipc/sendbcast.c,v > retrieving revision 1.15 diff -u -r1.15 sendbcast.c > --- sendbcast.c 6 May 2004 15:35:31 -0000 1.15 > +++ sendbcast.c 20 May 2004 16:08:03 -0000 > @@ -167,18 +167,20 @@ > { > struct port *this =3D (struct port *) ref_deref(ref); uint res =3D 0; > + int dsz; > struct tipc_msg *m; > struct mc_identity *mid =3D NULL; > struct list_head *pos; > struct sk_buff *copybuf; > tipc_net_addr_t prev_destnode; >=20 > + dsz =3D msg_data_sz(buf_msg(buf)); > m =3D &this->publ.phdr; > if (importance <=3D 3) > msg_set_importance(m, importance); >=20 > + prev_destnode =3D 0; > list_for_each(pos, mc_head) { > - prev_destnode =3D 0; > mid =3D list_entry(pos, struct mc_identity, list); > if (mid !=3D NULL && (prev_destnode !=3D mid->node)) { > prev_destnode =3D mid->node; > @@ -188,9 +190,9 @@ > res =3D > tipc_send_buf_fast(copybuf, mid->node); > } else { > res =3D bcast_port_recv(copybuf); > - if (res !=3D 0) > - break; > } > + if (res !=3D dsz) > + break; > } > } > buf_safe_discard(buf); |