* [PATCH 2.6 IrDA] LAP close race
@ 2003-09-05 21:43 Jean Tourrilhes
0 siblings, 0 replies; only message in thread
From: Jean Tourrilhes @ 2003-09-05 21:43 UTC (permalink / raw)
To: Jeff Garzik, Linux kernel mailing list
ir2604_lap_close_race-5.diff :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
o [CRITICA] Fix a race condition when closing the LAP
prevent the stack to open new LSAPs while we are killing them.
diff -u -p linux/net/irda/irlap.d2.c linux/net/irda/irlap.c
--- linux/net/irda/irlap.d2.c Thu Sep 4 18:30:08 2003
+++ linux/net/irda/irlap.c Thu Sep 4 18:30:37 2003
@@ -221,8 +221,11 @@ void irlap_close(struct irlap_cb *self)
ASSERT(self != NULL, return;);
ASSERT(self->magic == LAP_MAGIC, return;);
- irlap_disconnect_indication(self, LAP_DISC_INDICATION);
+ /* We used to send a LAP_DISC_INDICATION here, but this was
+ * racy. This has been move within irlmp_unregister_link()
+ * itself. Jean II */
+ /* Kill the LAP and all LSAPs on top of it */
irlmp_unregister_link(self->saddr);
self->notify.instance = NULL;
diff -u -p linux/net/irda/irlmp.d2.c linux/net/irda/irlmp.c
--- linux/net/irda/irlmp.d2.c Thu Sep 4 18:30:15 2003
+++ linux/net/irda/irlmp.c Thu Sep 4 18:30:37 2003
@@ -321,15 +321,23 @@ void irlmp_unregister_link(__u32 saddr)
IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
+ /* We must remove ourselves from the hashbin *first*. This ensure
+ * that no more LSAPs will be open on this link and no discovery
+ * will be triggered anymore. Jean II */
link = hashbin_remove(irlmp->links, saddr, NULL);
if (link) {
ASSERT(link->magic == LMP_LAP_MAGIC, return;);
+ /* Kill all the LSAPs on this link. Jean II */
+ link->reason = LAP_DISC_INDICATION;
+ link->daddr = DEV_ADDR_ANY;
+ irlmp_do_lap_event(link, LM_LAP_DISCONNECT_INDICATION, NULL);
+
/* Remove all discoveries discovered at this link */
irlmp_expire_discoveries(irlmp->cachelog, link->saddr, TRUE);
+ /* Final cleanup */
del_timer(&link->idle_timer);
-
link->magic = 0;
kfree(link);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2003-09-05 21:46 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-09-05 21:43 [PATCH 2.6 IrDA] LAP close race Jean Tourrilhes
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).