: ir241_irnet_simult_race-2.diff
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
@@ -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
@@ -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
@@ -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