Skip to contentSkip to conversation

: ir241_irnet_simult_race-2.diff

PATCH New Jean Tourrilhes 1 participant 1 message Dec 2, 2002 Networking

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 : ir241_irnet_simult_race-2.diff

ir241_irnet_simult_race-2.diff :
------------------------------
o [CORRECT] Prevent dealock on simultaneous peer IrNET connections Only the primary peer will accept the IrNET connection

include/net/irda/irlap.h renamed from include/net/irda/irlap.d7.h +20 -2
diff -u -p linux/include/net/irda/irlap.d7.h linux/include/net/irda/irlap.h
@@ -31,8 +31,6 @@
 #include <linux/types.h>
 #include <linux/skbuff.h>
 #include <linux/netdevice.h>
-#include <linux/ppp_defs.h>
-#include <linux/ppp-comp.h>
 #include <linux/timer.h>
 
 #include <net/irda/irlap_event.h>
@@ -239,5 +237,25 @@ void irlap_apply_connection_parameters(s
 
 #define IRLAP_GET_HEADER_SIZE(self) (LAP_MAX_HEADER)
 #define IRLAP_GET_TX_QUEUE_LEN(self) skb_queue_len(&self->txq)
+
+/* Return TRUE if the node is in primary mode (i.e. master)
+ * - Jean II */
+static inline int irlap_is_primary(struct irlap_cb *self)
+{
+	int ret;
+	switch(self->state) {
+	case LAP_XMIT_P:
+	case LAP_NRM_P:
+		ret = 1;
+		break;
+	case LAP_XMIT_S:
+	case LAP_NRM_S:
+		ret = 0;
+		break;
+	default:
+		ret = -1;
+	}
+	return(ret);
+}
 
 #endif
include/net/irda/irttp.h renamed from include/net/irda/irttp.d7.h +12 -0
diff -u -p linux/include/net/irda/irttp.d7.h linux/include/net/irda/irttp.h
@@ -197,6 +197,18 @@ static inline void irttp_listen(struct t
 	self->dtsap_sel = LSAP_ANY;
 }
 
+/* Return TRUE if the node is in primary mode (i.e. master)
+ * - Jean II */
+static inline int irttp_is_primary(struct tsap_cb *self)
+{
+	if ((self == NULL) ||
+	    (self->lsap == NULL) ||
+	    (self->lsap->lap == NULL) ||
+	    (self->lsap->lap->irlap == NULL))
+		return -2;
+	return(irlap_is_primary(self->lsap->lap->irlap));
+}
+
 extern struct irttp_cb *irttp;
 
 #endif /* IRTTP_H */
net/irda/irnet/irnet.h renamed from net/irda/irnet/irnet.d7.h +5 -0
diff -u -p linux/net/irda/irnet/irnet.d7.h linux/net/irda/irnet/irnet.h
@@ -217,6 +217,11 @@
  *	  Better fix in irnet_disconnect_indication() :
  *	  - if connected, kill pppd via hangup.
  *	  - if not connected, reenable ppp Tx, which trigger IrNET retry.
+ *
+ * v12 - 10.4.02 - Jean II
+ *	o Fix race condition in irnet_connect_indication().
+ *	  If the socket was already trying to connect, drop old connection
+ *	  and use new one only if acting as primary. See comments.
  */
 
 /***************************** INCLUDES *****************************/
net/irda/irnet/irnet_irda.c renamed from net/irda/irnet/irnet_irda.d7.c +66 -32

112 lines not on this page · raw message